JS注入操作页面对象
在用selenium webdriver 编写web页面的自动化测试代码时,有时对页面对象的操作需要通过js语句去执行,selenium本身就支持执行js,我们在代码中import org.openqa.selenium.JavascriptExecutor;
就可以使用executeScript
、executeAsyncScript
这两个方法了,其中executeScript
是同步方法,用它执行js代码会阻塞主线程执行,直到js代码执行完毕;executeAsyncScript
方法是异步方法,它不会阻塞主线程执行。
executeScript方法如果有返回值,有以下几种情况:
- 如果返回一个页面元素(document element), 这个方法就会返回一个WebElement
- 如果返回浮点数字,这个方法就返回一个double类型的数字
- 返回非浮点数字,方法返回Long类型数字
- 返回boolean类型,方法返回Boolean类型
- 如果返回一个数组,方法会返回一个List<Object>
- 其他情况,返回一个字符串
- 如果没有返回值,此方法就会返回null
例子:
1,打开baidu,
2,随便输入搜索内容
3,用firebug识别到“百度一下‘按钮
4,在右边输入js代码,document.getElementById("su").click();
s.click()
5,点击run,你会发现js脚本触发了”百度一下“按钮,进行搜索动作。
在webdriver脚本中的使用形式:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
1. 直接操作元素
jse.executeScript("window.document.getElementById('jingshou').click()");
WebElement element = driver.findElement(By.id("jingshou"));
jse.executeScript("arguments[0].click();", element); 也可以写成这样jse.executeScript("arguments[0].onclick=function(){alert('This is my alert!');}", element)
你也可以传入多个参数,使用arguments[]下标来指定你要使用的参数,记住下标是从0开始的
WebDriver driver = new FirefoxDriver();
try
{
driver.get("http://www.baidu.com");
//利用webdriver键入搜索关键字
//driver.findElement(By.id("kw")).sendKeys("yeetrack");
//利用js代码键入搜索关键字
((JavascriptExecutor)driver).executeScript("document.getElementById(\"kw\").value=\"yeetrack\"");
//利用js代码取出关键字
String keyword = (String) ((JavascriptExecutor)driver).executeScript("var input = document.getElementById(\"kw\").value;return input");
System.out.println(keyword);
driver.findElement(By.id("su")).click();
TimeUnit.SECONDS.sleep(5);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
driver.quit();
}
JS注入操作页面对象的更多相关文章
- 使用HTML5的JS选择器操作页面中的元素
文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> ...
- js事件,操作页面文档,计算后样式,数据类型
js:运行在浏览器的脚本语言 js引入 1.行间式:存在于行间事件中 <div id="div" onclick="this.style.color="r ...
- selenium webdriver(3)---操作页面对象
页面对象的相关操作可以通过接口文件org.openqa.selenium.WebElement查看,本文只是对象接口的使用方式,具体的实现方式在org.openqa.selenium.remote.R ...
- js/jquery 操作document对象
一.获取对象 //js获取的是dom对象,jquery获取的是jquery对象 //jquery对象可以输出dom对象,索引方式输出dom对象,eq()[]方式输出dom对象;eq()输出jquery ...
- JavaScript操作DOM对象
js的精华即是操作DOM对象 [1]先看代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...
- 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作
页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...
- DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)
一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢 ...
- js介绍,js三种引入方式,js选择器,js四种调试方式,js操作页面文档DOM(修改文本,修改css样式,修改属性)
js介绍 js运行编写在浏览器上的脚本语言(外挂,具有逻辑性) 脚本语言:运行在浏览器上的独立的代码块(具有逻辑性) 操作BOM 浏览器对象盒子 操作DOM 文本对象 js三种引入方式 (1)行间式: ...
- js导读,js引入,js选择器,事件,操作页面文档,计算后样式,数据类型
js导读 ''' js属于编写运行在浏览器上的脚本语言 js采用ECMAScript语法 操作BOM:浏览器对象模型 eg:浏览器上下滑动,浏览器历史记录 操作DOM:文档对象模型 ''' js引入 ...
随机推荐
- 各个浏览器下实现Ajax的JS
var xmlhttpget; try { // Firefox, Opera 8.0+, Safari xmlhttpget = new window.XMLHttpRequest( ...
- Xcode常用快捷键及代码格式刷(缩进)方法-b
Xcode版本:4.5.1 一.总结的常用命令: 隐藏xcode command+h 退出xcode command+q 关闭窗口 command+w 关闭所有窗口 command+option+w ...
- Visual Studio 中TODO List的使用
http://msdn.microsoft.com/en-us/library/txtwdysk.aspx 工欲善其事,必先利其器 When the Task List is open, you ca ...
- jQuery列表拖动排列-jquery list dragsort插件参数和使用方法
在编写网页的时候,有时可能需要对ul的li进行排序,今天就给大家推荐使用jquery插件jquery list dragsort实现列表拖动排序效果. 效果如图: jquery list dragso ...
- PAT-乙级-1031. 查验身份证(15)
1031. 查验身份证(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 一个合法的身份证号码由17位地区. ...
- hdu 1176
简单DP 类似于在一个矩形中求最长路径 /************************************************************************* > ...
- ECSHOP报错误Deprecated: preg_replace(): The /e modifier is depr
http://www.ecshoptemplate.com/article-1850.html
- live555源码研究(十)------在编译过程中遇到的问题及解决方法
一.编译testOnDemandRTSPServer.cpp. 在testProgs项目中,加入testOnDemandRTSPServer.cpp进行编译,编译类型是编译成exe文件,在编译过程中会 ...
- Hibernate逍遥游记-第2章-使用hibernate.properties
1. package mypack; import org.hibernate.*; import org.hibernate.cfg.Configuration; import java.util. ...
- *J2EE中乱码处理
发生中文乱码有三种情况 表单form (1)post 首先确定浏览器的编码方式,比如说utf-8,请求发给web服务器,web服务器以编码方式iso-9959-1来接收数据(服务器是外国人编写的),服 ...