Selenium2(WebDriver)中执行JavaScript代码 (转)

在用selenium编写web页面的自动化测试代码时,可能需要执行一些JavaScript代码,selenium本身就支持执行js,我们在代码中可以使用executeScript、executeAsyncScript这两个方法来执行JS。 
executeScript是同步方法,用它执行js代码会阻塞主线程执行,直到JS代码执行完毕; 
executeAsyncScript方法是异步方法,它不会阻塞主线程执行。

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(String script, object... args);

executeScript方法如果有返回值,有以下几种情况:
   1、如果返回一个页面元素(document element), 这个方法就会返回一个WebElement
   2、如果返回浮点数字,这个方法就返回一个double类型的数字
   3、返回非浮点数字,方法返回Long类型数字
   4、返回boolean类型,方法返回Boolean类型
   5、如果返回一个数组,方法会返回一个List<Object>
   6、其他情况,返回一个字符串
   7、如果没有返回值,此方法就会返回null

JavascriptExecutor js = (JavascriptExecutor) driver; 


// 用js弹出alert

js.executeScript("alert('Test Case Execution Is started Now..');");
driver.switchTo().alert().accept();
// 用js判断页面加载完毕,返回complete

System.out.println("readyState: " + js.executeScript("return document.readyState").toString());
// 用js得到页面的title

String title = (String) js.executeScript("return document.title");
System.out.println("current page title get by js: " + title);
// 用js得到页面的domain name

System.out.println("current page domain name get by js: " + js.executeScript("return document.domain"));
// 用js操作页面元素,如高亮显示某个元素


WebElement element = driver.findElement(By.id("kw"));
js.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "color: orange; border: 4px solid orange;");

/** * 每隔一秒check一下页面加载是否完成,check次数是25 */
public void checkPageIsReady()
{ JavascriptExecutor js = (JavascriptExecutor) driver;

for (int i = 0; i < 25; i++) {
if ("complete".equals(js
.executeScript("return document.readyState").toString())) {
break;
} try {
Thread.sleep(1000); }
catch (InterruptedException e) {
e.printStackTrace();
}
}
}

 

原文地址:https://www.cnblogs.com/jack1989/p/7657501.html