章節十4、3-執行JavaScript命令

1、網頁頁面都是由html+css和javaScript組成的,若是頁面中沒有javaScript的存在,就不會有操做動做的執行,例如頁面上你點擊的按鈕或者連接都離不開javaScript。(這一節不是爲了講javaScript的知識,對javaScript感興趣的同窗能夠本身去網上找資料學習)。javascript

 

2、如何用javaScript打開百度頁面,並定位百度搜索輸入框輸入值?css

 1 package basicweb;
 2 
 3 import java.util.concurrent.TimeUnit;
 4 
 5 import org.junit.jupiter.api.AfterEach;
 6 import org.junit.jupiter.api.BeforeEach;
 7 import org.junit.jupiter.api.Test;
 8 import org.openqa.selenium.By;
 9 import org.openqa.selenium.JavascriptExecutor;
10 import org.openqa.selenium.WebDriver;
11 import org.openqa.selenium.WebElement;
12 import org.openqa.selenium.chrome.ChromeDriver;
13 
14 class JavaScriptExecution {
15     
16     WebDriver driver;
17     String url;
18 //    聲明一個私有的JavascriptExecutor變量
19     private JavascriptExecutor js;
20 
21     @BeforeEach
22     void setUp() throws Exception {
23         driver = new ChromeDriver();
24         url = "https://www.baidu.com/";
25 //        把driver強制轉換成JavascriptExecutor類型
26         js = (JavascriptExecutor)driver;
27         driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
28         driver.manage().window().maximize();
29     }
30     
31     @Test
32     void test() throws InterruptedException {
33 //        driver.get(url);
34 //        經過javaScript打開網站
35         js.executeScript("window.location = 'https://www.baidu.com/';");
36         
37 //        在這裏加入等待爲了防止經過javascript打開網站後,會當即查找元素,而這個時候可能頁面尚未加載完成,元素未被查找到,程序就會報錯。   
38 //        而driver.get();會默認等到網站加載完成再執行下面的操做,因此上面的章節中不須要使用強制等待。
39         Thread.sleep(3000);
40         
41         
42 //        WebElement text = driver.findElement(By.id("kw"));
43 //        經過javaScript查找搜索輸入框元素,由於咱們須要返回元素,因此須要使用return
44 //        javaScript中沒有By.name,By.Xpath等查找元素的方式,只有Byid,ByTagName,ByName,ByClassName,ByTagName,ByName,ByClassNameu返回的是多個元素,獲取的是元素組
45 //        由於.getElementBy**('')返回的是object類型的元素,所以須要轉型
46         WebElement text = (WebElement)js.executeScript("return document.getElementById('kw');");
47         text.sendKeys("test");
48     }
49 
50     @AfterEach
51     void tearDown() throws Exception {
52         Thread.sleep(2000);
53         driver.quit();
54     }
55 }

 

3、注意事項html

一、javaScript中沒有By.name,By.Xpath等查找元素的方式,只有ById,ByTagName,ByName,ByClassName,ByTagName,ByName,ByClassNameu返回的是多個元素,獲取的是類數組。java

document.getElementById();//id
document.getElementsByTagName();//標籤名;Elements加了S,選出來是類數組;
document.getElementsByName();//name屬性,部分標籤能夠;Elements加了S,選出來是類數組;
document.getElementsByClassName();//class;Elements加了S,選出來是類數組;IE9如下不支持;web

二、使用Javascript進行操做時,須要driver(瀏覽器對象)強制轉換成JavascriptExecutor類型。chrome

三、使用Javascript進行操做打開網頁時,爲了防止出現頁面未加載完成而致使查找元素失敗的狀況出現,咱們須要在進入頁面後最好加上強制等待。api

四、由於.getElementBy**('')查找的元素返回的是object類型的元素,所以須要轉型,這裏是webElement類型的因此須要用WebElement類型的來接收返回的值,若是是其它類型的變量則須要用相對應的類型來接收。數組

 

若是有不明白的小夥伴能夠加羣「555191854」問我,羣裏都是軟件行業的小夥伴相互一塊兒學習。瀏覽器

相關文章
相關標籤/搜索