JavaScript在selenium自动化中的应用

23 篇文章 1 订阅
1 篇文章 0 订阅

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 属性

//<a href="https://app.mail.qq.com/" target="_blank">手机版</a>
String js = "document.getElementById('xxx').removeAttribute('target')";
driver.executeScript(js);

窗口滚动

driver.get("https://ke.qq.com/?tuin=68973267");
//0:滚动到最顶端
driver.executeScript("window.scrollTo(0,0)");
//1:滚动到最底部
driver.executeScript("window.scroll(0,document.body.scrollHeight)");
//2:滚动到指定的位置
driver.executeScript("window.scrollTo(0,500)");
//3:滚动到指定元素
WebElement txy = driver.findElement(By.partialLinkText("腾讯云"));
driver.executeScript("arguments[0].scrollIntoView();",txy);

注入 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());

本文由柠檬班happy老师原创,转载需注明出处!

想了解更多咨询的同学扫描下方二维码,可以加Q群领取学习资料:753665853  备注:CSDN  


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值