標籤:exec elements 基於 指定 對象 oid script 使用 pac
首先,我們使用如下方式初始化driver:
1 WebDriver driver = new FirefoxDriver(); 2 JavascriptExecutor jse = (JavascriptExecutor)driver;
1.直接傳入JavaScript代碼
可以直接給jse傳入javascript代碼:
1 jse.executeScript("window.document.getElementById(‘jingshou‘).click()";
2.傳入WebElement執行js:
1 WebElement element = driver.findElement(By.id("jingshou")); 2 jse.executeScript("arguments[0].click();", element);
又或者:
1 jse.executeScript("arguments[0].onclick=function(){alert(‘This is my alert!‘);}", element)
其中auguments[0]就代表element, 甚至我們可以傳入更多的參數,比如
1 WebElement div = driver.findElemnt(By.id("myDiv")); 2 jse.executeScript("arguments[0].setAttribute(‘style‘, arguments[1])", div, "height: 1000px");
通過執行以上代碼,我們指定的DIV就新增(修改)了 style {height: 1000px}的屬性
在WebDriver中可以使用JavaScript,通地使用JavascriptExector對象
首先要通過向下轉型 JavascriptExecutor js = (JavascriptExecutor) driver; 轉為JavascriptExector對象
然後再調用executeScript()方法來執行JS。
例:
1. 開啟Google首頁
2. 通過JS擷取網頁中的title --- document.title
3. 獲得網頁中連結的數量 ----var links = document.getElementsByTagName(‘A‘); return links.length
具體實現如下
1 package com.example.tests; 2 import static org.junit.Assert.*; 3 import org.junit.*; 4 import org.openqa.selenium.*; 5 import org.openqa.selenium.ie.InternetExplorerDriver; 6 7 public class test { 8 @Test 9 public void testJavaScriptCalls() { 10 WebDriver driver = new InternetExplorerDriver(); 11 driver.get("http://www.google.com.hk"); 12 JavascriptExecutor js = (JavascriptExecutor) driver; 13 String title = (String) js.executeScript("return document.title"); 14 assertEquals("Google", title); 15 long links = (Long) js.executeScript("var links = " 16 + "document.getElementsByTagName(‘A‘); " 17 + "return links.length"); 18 assertEquals(32, links); 19 driver.close(); 20 } 21 }
從javaScript代碼中返回資料,我們需要使用return關鍵字。基於傳回值的類型,我們需要對 executeScript()方法進行轉型。對於帶小數點的值,使用Double類型,非小數值可以使用Long類型,布爾值可以使用Boolean類 型,如果返回的是HTML節點,可以使用 WebElement類型,文本值,可以使用String類型。如果返回的是對象列表,基於物件類型的任何值都可以。
WebDriver中執行JavaScript