webdriver UI自动化测试执行JS脚本

来源:互联网 发布:js视频进度条 编辑:程序博客网 时间:2024/05/16 18:55

       不管是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。

获取以上输入框值得操作如下:


String getInfo = "return angular.element(document.getElementById('email')).scope().supplierBaseInfo.supplierName";     JavascriptExecutor jse=(JavascriptExecutor) TestBase.getWebDriver();       String baseMap =  (String) jse.executeScript(getInfo); 

通过上面的代码我如愿的拿到了我想要的结果.

关键点在与上面这段代码中的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(Stringurl) {

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 (elementinstanceof WebElement) {

WebElementanchor = (WebElement) element;

anchor.click();

trigger("var a=arguments[0];a.parentNode.removeChild(a);",anchor);

} else {

thrownew JavaScriptException(element,"Unable to open tab", 1);

}

}


0 0
原创粉丝点击