webdriver UI自动化测试执行JS脚本
2015-12-25 17:04
489 查看
不管是selenium RC 还是 webdriver 其在浏览器端 最终还是通过JS来操作页面元素实现自动化测试的(可参见2者的实现原理),在做自动化测试的时候,如果webdriver现有的java API 不满足测试需要的时候,我们可以尝试执行js脚本来协助自动化测试的运行,还好webdriver提供了执行JS脚本的接口:webdriver.executeScript(String jsCMD);
使用实例:
由于我所测试的项目 前端使用的JS框架是angular js,根据angular js 双向绑定的特点,开发无需在当前页面直接显示页面元素对应的值,只需要将此元素(angular js 的属性)绑定到对应的controller中即可,数据在controller中维护,所以测试页面有些属性你直接是抓不到他的文本值的,如下图:
从上面可以看出,这个输入框的数据肯定维护在了其他地方,此时,我们可以咨询此页面的开发人员,这个值存在哪里,以及如何拿到,如果这个值没有在当前页面的其他地方,而是在页面引用的其他的JS文件中存储的时候,webdriver通过元素定位值的方式 是无法拿到这个输入框的内容的,这个时候我们就可以 考虑使用JS去拿到这个值,如果你对所测网页的前端代码架构很熟悉 可以自己尝试些JS 或者直接让开发人员提供给你JS。
获取以上输入框值得操作如下:
[b]通过上面的代码我如愿的拿到了我想要的结果.
[/b]
关键点在与上面这段代码中的JS脚本,
记住JS脚本 前 一定要有 return ,如果上面脚本改为:
================执行js脚本在浏览器上打开新的tab页
public void openTab(String
url) {
String script =
"var d=document,a=d.createElement('a');a.target='_blank';a.href='%s';a.innerHTML='.';d.body.appendChild(a);return a";
Object element = trigger(String.format(script,
url));
if (element
instanceof WebElement) {
WebElement
anchor = (WebElement)
element;
anchor.click();
trigger("var a=arguments[0];a.parentNode.removeChild(a);",
anchor);
} else {
throw
new JavaScriptException(element,
"Unable to open tab", 1);
}
}
使用实例:
由于我所测试的项目 前端使用的JS框架是angular js,根据angular js 双向绑定的特点,开发无需在当前页面直接显示页面元素对应的值,只需要将此元素(angular js 的属性)绑定到对应的controller中即可,数据在controller中维护,所以测试页面有些属性你直接是抓不到他的文本值的,如下图:
从上面可以看出,这个输入框的数据肯定维护在了其他地方,此时,我们可以咨询此页面的开发人员,这个值存在哪里,以及如何拿到,如果这个值没有在当前页面的其他地方,而是在页面引用的其他的JS文件中存储的时候,webdriver通过元素定位值的方式 是无法拿到这个输入框的内容的,这个时候我们就可以 考虑使用JS去拿到这个值,如果你对所测网页的前端代码架构很熟悉 可以自己尝试些JS 或者直接让开发人员提供给你JS。
获取以上输入框值得操作如下:
String getInfo = "return angular.element(document.getElementById('email')).scope().supplierBaseInfo.supplierName"; JavascriptExecutor jse=(JavascriptExecutor) TestBase.getWebDriver(); String baseMap = (String) jse.executeScript(getInfo);
[b]通过上面的代码我如愿的拿到了我想要的结果.
[/b]
关键点在与上面这段代码中的JS脚本,
“return angular.element(document.getElementById('email')).scope().supplierBaseInfo.supplierName“
记住JS脚本 前 一定要有 return ,如果上面脚本改为:
“angular.element(document.getElementById('email')).scope().supplierBaseInfo.supplierName“
执行以上JS不能返回运行结果:
String baseMap = (String) executeScript(“angular.element(document.getElementById('email')).scope().supplierBaseInfo.supplierName)
================执行js脚本在浏览器上打开新的tab页
public void openTab(String
url) {
String script =
"var d=document,a=d.createElement('a');a.target='_blank';a.href='%s';a.innerHTML='.';d.body.appendChild(a);return a";
Object element = trigger(String.format(script,
url));
if (element
instanceof WebElement) {
WebElement
anchor = (WebElement)
element;
anchor.click();
trigger("var a=arguments[0];a.parentNode.removeChild(a);",
anchor);
} else {
throw
new JavaScriptException(element,
"Unable to open tab", 1);
}
}
相关文章推荐
- 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
- 22个值得收藏的android开源码-UI篇
- Android线程模型--在子线程中更新UI
- Loadrunner中参数化实战(1)-Sequential+Each iteration
- Java GUI
- Android ui 测试课堂笔记
- requestLayout和invalidate方法的区别
- Servlet(Response,Request)
- Android ui 测试课堂笔记
- Java UUID
- 使用burpsuite_pro_v1.6破解版暴力破解实例
- leetcode -- Range Sum Query 2D - Immutable -- 简单DP题目
- Webdriver UI自动化测试使用mybatis访问数据库
- UITableView - beginUpdates和endUpdates方法
- windows2008 nps+802.1
- UIViewController各个方法的加载顺序
- UIButton
- 05 Stacks and Queues
- Implement Queue using Stacks 用俩栈实现队列
- iOS开发-简述UITableView中cell的重用问题