JS注入操作页面对象
2015-08-10 12:18
791 查看
在用selenium webdriver 编写web页面的自动化测试代码时,有时对页面对象的操作需要通过js语句去执行,selenium本身就支持执行js,我们在代码中
executeScript方法如果有返回值,有以下几种情况:
如果返回一个页面元素(document element), 这个方法就会返回一个WebElement
如果返回浮点数字,这个方法就返回一个double类型的数字
返回非浮点数字,方法返回Long类型数字
返回boolean类型,方法返回Boolean类型
如果返回一个数组,方法会返回一个List<Object>
其他情况,返回一个字符串
如果没有返回值,此方法就会返回null
从javaScript代码中返回数据,我们需要使用return关键字。基于返回值的类型,我们需要对executeScript() 方法进行转型。对于带小数点的值,使用Double类型,非小数值可以使用Long类型,布尔值可以使用Boolean类型,如果返回的是HTML节点, 可以使用 WebElement类型,文本值,可以使用String类型。如果返回的是对象列表,基于对象类型的任何值都可以。
为了验证写的js代码是否正确,需要首先对其验证,然后加入到脚本里去执行。firebug的console模块就提供了这样的一个调试功能,打开firebug,切换到console页面,在右边就可以输入js脚本,点击run就可以调试了。
例子:
1,打开baidu,
2,随便输入搜索内容
3,用firebug识别到“百度一下‘按钮
4,在右边输入js代码,document.getElementById("su").click();
5,点击run,你会发现js脚本触发了”百度一下“按钮,进行搜索动作。
在webdriver脚本中的使用形式:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
1. 直接操作元素
jse.executeScript("window.document.getElementById('jingshou').click()");
2、传入element当着参数然后操作
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开始的
代码展示:
但是目前好像不支持document.getElementByXpath()方法去操作对象。或许是没有研究透,需要更深入的了解。下期文章再更新。
import org.openqa.selenium.JavascriptExecutor;就可以使用
executeScript、
executeAsyncScript这两个方法了,其中
executeScript是同步方法,用它执行js代码会阻塞主线程执行,直到js代码执行完毕;
executeAsyncScript方法是异步方法,它不会阻塞主线程执行。
executeScript方法如果有返回值,有以下几种情况:
如果返回一个页面元素(document element), 这个方法就会返回一个WebElement
如果返回浮点数字,这个方法就返回一个double类型的数字
返回非浮点数字,方法返回Long类型数字
返回boolean类型,方法返回Boolean类型
如果返回一个数组,方法会返回一个List<Object>
其他情况,返回一个字符串
如果没有返回值,此方法就会返回null
从javaScript代码中返回数据,我们需要使用return关键字。基于返回值的类型,我们需要对executeScript() 方法进行转型。对于带小数点的值,使用Double类型,非小数值可以使用Long类型,布尔值可以使用Boolean类型,如果返回的是HTML节点, 可以使用 WebElement类型,文本值,可以使用String类型。如果返回的是对象列表,基于对象类型的任何值都可以。
为了验证写的js代码是否正确,需要首先对其验证,然后加入到脚本里去执行。firebug的console模块就提供了这样的一个调试功能,打开firebug,切换到console页面,在右边就可以输入js脚本,点击run就可以调试了。
例子:
1,打开baidu,
2,随便输入搜索内容
3,用firebug识别到“百度一下‘按钮
4,在右边输入js代码,document.getElementById("su").click();
5,点击run,你会发现js脚本触发了”百度一下“按钮,进行搜索动作。
在webdriver脚本中的使用形式:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
1. 直接操作元素
jse.executeScript("window.document.getElementById('jingshou').click()");
2、传入element当着参数然后操作
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(); }
但是目前好像不支持document.getElementByXpath()方法去操作对象。或许是没有研究透,需要更深入的了解。下期文章再更新。
相关文章推荐
- JSON的传输数据报错
- javascript 中concat与push的区别
- javascript与Python快速排序实例对比
- javascript密码强度校验代码(两种方法)
- javascript实现数组内值索引随机化及创建随机数组的方法
- 关于 CommonJS AMD CMD UMD 规范的差异总结
- 在页面载入的时候,执行js
- 使用artTemplate绑定json数据
- javaScript改变HTML中的图片元素
- js弹出窗口、右下角浮动窗体(最小化最大化关闭)
- html,js一个元素做两次不同点击事件
- html,js一个元素做两次不同点击事件
- Ajax中解析Json的两种方法详解
- 【深拷贝/浅拷贝】javascript的深拷贝和浅拷贝
- 【深拷贝/浅拷贝】javascript的深拷贝和浅拷贝 分类: js javascript深拷贝 深拷贝浅拷贝 javascript 2015-08-10 11:29 7人阅读 评论(0) 收藏
- 一个简单的jsp+servlet实例,实现简单的登录
- JavaScript中的方法重载
- json跨域请求报错
- json小结
- Json还可以这样用