Selenium执行JavaScript脚本的方法示例


Posted in Javascript onDecember 31, 2020

JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页。可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在Web页面中进行js交互。那么js能做的事,Selenium应该大部分也能做。WebDriver是模拟终端用户的交互,所以就不能点击不可见的元素,有时可见元素也不能点击。在这些情况下,我们就可以通过WebDriver 执行JavaScript来点击或者执行页面元素。本文将介绍如何使用 WebDriver执行 JavaScript语句。

Web元素定位及操作

使用execute_script() 执行 JavaScript 代码,有两种方法实现元素操作

方法1:文档级别操作

直接使用JavaScript实现元素定位和动作执行,主要方法有:

document.getElementById
document.getElementsByClassName
document.getElementsByName
document.getElementsByTagName
document.getElementsByTagNameNS

测试示例:

  • 打开百度一下
  • 输入框输入”test“
  • 点击百度一下

python代码:

def test_baidu(self):
  self.driver.get("http://www.baidu.com")
  self.driver.execute_script('document.getElementById("kw").value = "test"')
  time.sleep(2)
  self.driver.execute_script('document.getElementById("su").click()')
  time.sleep(2)

在执行过程中,WebDriver 将 JavaScript 语句注入到浏览器中,然后脚本将执行。这个注入 JavaScript 有自己的名称空间,不会干扰实际网页中的 JavaScript运行。

方法2:元素级别操作

可以先使用WebDriver获取想要操作的元素,然后使用JavaScript执行操作。

input_ele = driver.find_element_by_id("su") 
driver.execute_script("arguments[0].click();", input_ele)

python代码:

def test_baidu2(self):
  self.driver.get("http://www.baidu.com")
  input_ele = self.driver.find_element_by_id("kw")
  self.driver.execute_script("arguments[0].value = 'test';", input_ele)
  time.sleep(2)
  baidu_ele = self.driver.find_element_by_id("su")
  self.driver.execute_script("arguments[0].click();", baidu_ele)
  time.sleep(2)

可以在语句中使用多个 JavaScript动作:

username = driver.find_element_by_xpath("//*[@id='username']")
password = driver.find_element_by_xpath("//*[@id='password']")
driver.execute_script("arguments[0].value = 'admin';arguments[1].value = 'admin';", username, password)

获取返回值

可以返回JavaScript的执行结果:

driver.execute_script("return document.getElementById('kw').value")
driver.execute_script("return document.title;") # 返回网页标题

滑动

在 Web自动化测试 | ActionChains、TouchAction 中介绍了TouchAction类中scroll_from_element()也可以滑动页面。

滑动到浏览器底部

document.documentElement.scrollTop=10000
window.scrollTo(0, document.body.scrollHeight)

滑动到浏览器顶部

document.documentElement.scrollTop=0
window.scrollTo(document.body.scrollHeight,0)

更改元素属性

大部分时间控件都是 readonly属性,需要手动去选择对应的时间。自动化测试中,可以使用JavaScript代码取消readonly属性。

测试页面: https://www.12306.cn/index/

Selenium执行JavaScript脚本的方法示例

测试步骤:

  • 打开测试页面
  • 修改出发日期
  • 断言日期是否修改成功

python测试代码:

def test_datettime(self):
  self.driver.get("https://www.12306.cn/index/")
  # 取消readonly属性
  self.driver.execute_script("dat=document.getElementById('train_date'); dat.removeAttribute('readonly')")  
  self.driver.execute_script("document.getElementById('train_date').value='2020-10-01'")
  time.sleep(3)
  now_time = self.driver.execute_script("return document.getElementById('train_date').value")
  assert '2020-10-01' == now_time

总结

Selenium WebDriver 执行 JavaScript代码是一个非常强大的功能,可以实现WebElement 接口所有功能,甚至更多的功能。比如在web性能测试中可以调用Web API接口window.performance来测试Web性能。

到此这篇关于Selenium执行JavaScript脚本的方法示例的文章就介绍到这了,更多相关Selenium执行JavaScript脚本内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
Aug 04 Javascript
浏览器常用高宽的jquery插件
Feb 24 Javascript
浅析jquery的作用与优势
Dec 02 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 Javascript
Ajax基础知识详解
Feb 17 Javascript
Angular.js指令学习中一些重要属性的用法教程
May 24 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
vue实现手机号码抽奖上下滚动动画示例
Oct 18 Javascript
angular1.x ui-route传参的三种写法小结
Aug 31 Javascript
Electron 调用命令行(cmd)
Sep 23 Javascript
element-ui点击查看大图的方法示例
Dec 14 Javascript
javascript实现随机抽奖功能
Dec 30 #Javascript
JS+JQuery实现无缝连接轮播图
Dec 30 #jQuery
微信小程序弹窗禁止页面滚动的实现代码
Dec 30 #Javascript
vue-cli4.0多环境配置变量与模式详解
Dec 30 #Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 #Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 #Vue.js
js+html+css实现手动轮播和自动轮播
Dec 30 #Javascript
You might like
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
深入php之规范编程命名小结
2013/05/15 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
js获取页面description的方法
2015/05/21 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
微信小程序 上传头像的实例详解
2017/10/27 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
python实现简单颜色识别程序
2020/02/19 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
人力资源作业细则
2014/03/03 职场文书
温馨提示标语
2014/06/26 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
学生检讨书
2015/01/27 职场文书
返乡农民工证明
2015/06/24 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB