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」問我,羣裏都是軟件行業的小夥伴相互一塊兒學習。瀏覽器