webdriver脚本可以写cs结构的脚本吗

3657人阅读
// Selenium Client:&selenium-java-2.34.0
在执行脚本时,有时候引用一些元素对象会抛出如下异常
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
按字面表达的意思大概是,所引用的元素已过时,不再依附于当前页面。通常情况下,这是因为页面进行了刷新或跳转,解决方法是,重新使用&findElement 或 findElements 方法进行元素定位即可。
参考资料:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:25952次
排名:千里之外
原创:18篇
(1)(3)(1)(3)(5)(1)(1)(1)(1)(2)(2)(1)1861人阅读
软件测试(15)
自动化测试工具(20)
在用selenium 1.X的时候常常会用到getEval()方法来执行一段js脚本来对页面进行处理,以处理一些遇到的问题。当然selenium webdriver也提供这样的一个方法:executeScript()
下面演示在打开51.com首页如何得到帐号输入框中显示的字符,并打印输出。
/*** This class is about Execute javascript
* @author annie.wang
package com.annie.
import org.openqa.selenium.JavascriptE
import org.openqa.selenium.WebD
import org.openqa.selenium.firefox.FirefoxD
public class Execu_JS {
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver=new FirefoxDriver();
driver.get(&&);
/** Selenium 执行JS*/
String js = &var user_input = document.getElementById(\&passport_51_user\&).return user_&;
String input_title=(String)((JavascriptExecutor)driver).executeScript(js);
System.out.println(&---input title---&+input_title);
String title = driver.getTitle();
//得到当前页面url
String currentUrl = driver.getCurrentUrl();
//输出title和currenturl
System.out.println(&页面title:&+title+&\n&+&当前URL&+currentUrl);
((JavascriptExecutor)driver).executeScript(&alert(\&hello,this is a alert!\&)&);
String windowHandle=driver.getWindowHandle() ; //返回当前浏览器的窗口句柄
System.out.println(&当前窗口句柄:&+windowHandle+&\n&+windowHandle);
//String windowHandles=driver.getWindowHandles(Set); // 返回所有浏览器的窗口句柄
// String pageSource=driver.getPageSource()
//返回当前页面的源码
// System.out.println(pageSource+&\n&+pageSource);
结果如下:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:21159次
排名:千里之外
原创:30篇
(8)(1)(3)(1)(6)(1)(5)(2)(4)(1)(1)web UI自动化测试(32)
自动化测试(21)
软件测试技术(40)
编程技术(64)
质量把控(32)
& & & &不管是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(String
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,
if (element
instanceof WebElement) {
WebElement
anchor = (WebElement)
anchor.click();
trigger(&var a=arguments[0];a.parentNode.removeChild(a);&,
new JavaScriptException(element,
&Unable to open tab&, 1);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:22985次
积分:***
积分:***
排名:千里之外
原创:78篇
转载:68篇
评论:31条
(3)(8)(4)(4)(14)(15)(8)(24)(65) 您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

参考资料

 

随机推荐