JavaScript的调用

  在web自动化操作页面的时候,有些特殊的情况selenium的api无法完成,需要通过执行一段js来实现的DOM操作;

//执行方式
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("js代码");

例如:

1.时间插件限制手动输入的情况下,sendkeys无法写入数据,需要执行js来移除readonly属性!

详细参考博客:时间控件的处理

2.有些页面元素需要拉动滚动条才能获取到(因为拉取滚动条才加载),而selenium和webdriver都没有提供操作滚动条的方法,只能借助js来完成!

//执行方式
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
String js = "document.body.scrollTop=200";
jsExecutor.executeScript(js);//执行js

兴趣扩展:实现滚动条匀速向下滚动代码

package cn.test;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver; public class Test {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
WebDriver driver =new ChromeDriver();
try {
driver.get("https://www.12306.cn/index/");
driver.manage().window().maximize();
Thread.sleep(5000);
//执行方式
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
// String js = "document.documentElement.scrollTop=200";
String js = null;
for (int i = 0; i < driver.manage().window().getSize().height*2; i=i+3) {
if(driver instanceof ChromeDriver) {
js = "document.body.scrollTop="+i;
}else if(driver instanceof FirefoxDriver) {
js = "document.documentElement.scrollTop="+i;
}else if(driver instanceof InternetExplorerDriver) {
js = "document.documentElement.scrollTop="+i;
}
jsExecutor.executeScript(js);//执行js
}
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("执行结束,关闭浏览器!");
driver.quit();
}
}
}

学习后总结,不足之处后续补充。。。

未完待续、、、

最新文章

  1. EntityFramework之监听者判断SQL性能指标
  2. hibernate框架之-查询结果集返回类型
  3. Effective Objective-C 2.0 — 第五条用枚举表示状态、选项、状态码 (未看完)
  4. maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
  5. NSTimer用法,暂停,继续,初始化
  6. [转载]LINQ 中的 select
  7. Quartz2D 备忘 + 学习
  8. Vijos_1792_摆花_(动态规划,多重集组合数)
  9. JFinal开发web项目出现故障小记
  10. 玩转web之ajax(一)---使用表单的serialize()方法中文乱码解决
  11. leetcode第一刷_Spiral Matrix II
  12. requests使用“proxy”代理访问接口
  13. python之路-----前端之html协议一
  14. Python快速学习03:运算 &amp; 缩进和选择
  15. P2700 逐个击破 最小生成树
  16. stdlib库中qsort函数的使用
  17. Lambda引言
  18. jQuery-文本框事件应用-判断邮箱地址
  19. nbtscan工具
  20. iOS动画相关(持续更新)

热门文章

  1. flask_sqlalchemy 查询结果转dict 终极解决方案
  2. .NET 排序 Array.Sort&lt;T&gt; 实现分析
  3. Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)
  4. 架构师必备:MySQL主从同步原理和应用
  5. Sentry 监控 - Snuba 数据中台架构(Data Model 简介)
  6. Serverless 工程实践 | 零基础上手 Knative 应用
  7. React Native之新架构中的Turbo Module实现原理分析
  8. 题解 [HAOI2017]方案数
  9. Oil Deposits 新年特辑篇
  10. Postman实现SHA256withRSA签名