使用selenium做自动化测试,有时需要执行一些JavaScript代码。在selenium中有Javascript类可以执行。
import org.openqa.selenium.JavascriptExecutor;
其中有两个方法我们会经常遇到。
executeScript、executeAsyncScript
method | 详情 |
---|---|
executeScript | 同步方法,用它执行js代码会阻塞主线程执行,直到js代码执行完毕; |
executeAsyncScript | 异步方法,它不会阻塞主线程执行。 |
1. 初始化driver
通过向下转型 JavascriptExecutor js = (JavascriptExecutor) driver; 将driver转为JavascriptExector对象
然后再调用executeScript()方法来执行JS
JavascriptExecutor jse = (JavascriptExecutor)driver;
2.直接传入Javascript代码
可以直接给jse传入javascript代码:
jse.executeScript("window.document.getElementById('jingshou').click()";
3.传入WebElement执行JS
//
WebElement element = driver.findElement(By.id("jingshou")); jse.executeScript("arguments[0].click();", element); // inputbox is a WebElement JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("arguments[0].value=\"北京\"", from_inpox);
// 我们指定的DIV就新增(修改)了 style {height: 1000px}的属性
WebElement div = driver.findElemnt(By.id("myDiv"));
jse.executeScript("arguments[0].setAttribute('style', arguments[1])", div, "height: 1000px");
4. 滚动到指定位置
小技巧: 如何滚动到定位的元素,使用java script
// scroll to mylink JavascriptExecutor scroll = (JavascriptExecutor) driver; scroll.executeScript("arguments[0].scrollIntoView();", myLink);
JavascriptExecutor js=(JavascriptExecutor)driver;
// roll down and keep the element to the center of browser
js.executeScript("arguments[0].scrollIntoViewIfNeeded(true);", download);
<!-- window.scrollTo(左边距,上边距); -->
scroll.executeScript("window.scrollTo(100,450);");
//x为水平移动的像素、y为垂直移动像素、location为元素位置
//操作滚动条
1. 垂直滚动
String scroll = "document.documentElement.scrollTop=" + "y";
JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript(scroll);
2 .水平滚动
String scroll = "document.documentElement.scrollLeft=" + "x";
JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript(scroll);
3. 滚动条式
String scroll = "document.getElementById("location").scrollLeft=x";
JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript(scroll);