JavaScript在selenium自动化中的应用
JavaScript 相对于 selenium 原生 API 的执行速度更快,如果有遇到 selenium 难以处理的操作时,可以采用执行 js 代码去完成。
基本元素定位和操作
driver.get("http://www.baidu.com"); String js = "var inputEle = document.getElementById(kw); return inputEle;"; WebElement inputEle = (WebElement) jsExecutor.executeScript(js); System.out.println(inputEle.getAttribute("maxlength")); driver.executeScript("document.getElementById(kw).value=软件测试工程师的心灵社区;");
DOM 操作
移除 readonly 属性
当输入框使用的是选择控件且为只读状态时,selenium 原生 API 无法操作控件,可以通过 js 移除 readonly 属性。比如 12306 网站的日期选择框。
driver.get("https://www.12306.cn/index/"); String js = "document.getElementById(train_date).removeAttribute(readonly)"; driver.executeScript(js); Thread.sleep(2000); driver.findElement(By.id("train_date")).sendKeys(Keys.CONTROL,"a");//清空 Thread.sleep(2000); driver.findElement(By.id("train_date")).sendKeys(Keys.BACK_SPACE);//清空 driver.findElement(By.id("train_date")).sendKeys("2019-03-30");//输入
移除超链接的 target 属性
当超链接有 target="_blank" 属性时,点击超链接会打开第新的标签页,如果不想进行多窗口切换操作,可以通过 js 去除 target 属性
窗口滚动
注入 jQuery
如果我们想在没有引入 jquery.js 的页面也能使用 jQuery 进行操作,可以动态注入的方式、运行如下脚本注入 jquery.js。
StringBuffer str = new StringBuffer(); //创建一个script标签 str.append("var hm = document.createElement(script);"); //设置js文件路径 str.append("hm.src = http://libs.baidu.com/jquery/2.0.0/jquery.min.js;"); //获得head标签 str.append("var headEle = document.getElementsByTagName(head)[0]; "); //将script标签添加到head标签 str.append("headEle.appendChild(hm);"); //执行JavaScript完成jquery.js的注入 driver.executeScript(str.toString());
想了解更多咨询的同学扫描下方二维码,可以加Q群领取学习资料:753665853 备注: