webdriver js点击无法点击的元素
2018-04-02 00:45 清风软件测试开发 阅读(1947) 评论(0) 编辑 收藏 举报原文地址https://blog.csdn.net/galen2016/article/details/56847545
【WebDriver】调用JavaScript
一、WebDriver 提供了executeScript方法来执行JavaScript 代码,从而对页面元素做一些特殊操作
代码:
- ……
- WebDriver driver = new FirefoxDriver();
- JavascriptExecutor js = (JavascriptExecutor) driver;
- js.executeScript(String script, object... args);
- ……
第一行先new一个WebDriver,第二行将Webdriver强制转换为JavascriptExecutor,第三行执行js,参数script是要执行的js语句,后面的参数可以没有,也可以有1个或者多个。
二、调用js实例
1、拖动页面滚动条
- ……
- JavascriptExecutor js = (JavascriptExecutor) driver;
- js.executeScript("window.scrollTo(100,450);");
- ……
window.scrollTop()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。
2、弹出alert
- ……
- JavascriptExecutor js = (JavascriptExecutor) driver;
- js.executeScript("alert('Hello world!');");
- ……
3、向页面中textarea 文本框输入内容
如这个html:
![](https://img-blog.csdn.net/20170227085552837?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FsZW4yMDE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
- ……
- <textarea id="id" style="width: 98%" cols="50" rows="5" class="txtarea">
- </textarea>
- ……
Java代码:
- ……
- String areaText= "Hello World";
- String js = "var sum=document.getElementById('id'); sum.value='" + areaText+ "';";
- ((JavascriptExecutor)driver).executeScript(js);
- ……
4、点击某个元素
- ……
- //第一种方法
- JavascriptExecutor js = (JavascriptExecutor) driver;
- js.executeScript("window.document.getElementById('id').click()";
- //第二种方法
- WebElement element = driver.findElement(By.id("id"));
- js.executeScript("arguments[0].click()", element); //这里的auguments[0]就代表element
- ……
5、改变元素的属性
上图中的月份未选中选择时class为“bs_times_month”,点击某个月份后它的class会变为
“bs_times_monthBlue bs_times_monthSelected”。我们可以用js直接设置想要选中月份的class,就不用点击了。
“bs_times_monthBlue bs_times_monthSelected”。我们可以用js直接设置想要选中月份的class,就不用点击了。
代码:
- ……
- List<WebElement> months = driver.findElements(By.className("bs_times_month"));
- JavascriptExecutor js = (JavascriptExecutor)driver;
- js.executeScript("arguments[0].setAttribute('class',arguments[1])",months.get(3),"bs_times_monthBlue bs_times_monthSelected");
- ……