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 相关文章推荐
地震发生中逃生十大法则
May 12 Javascript
JavaScript CSS修改学习第二章 样式
Feb 19 Javascript
jquery图片放大功能简单实现
Aug 01 Javascript
javascript处理表单示例(javascript提交表单)
Apr 28 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
学习使用jquery iScroll.js移动端滚动条插件
Mar 24 Javascript
JS实现浏览上传文件的代码
Aug 23 Javascript
详解动画插件wow.js的使用方法
Sep 13 Javascript
JS验证码实现代码
Sep 14 Javascript
vue小图标favicon不显示的解决方案
Sep 19 Javascript
解决angularJS中input标签的ng-change事件无效问题
Sep 13 Javascript
通过js给网页加上水印背景实例
Jun 17 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
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
JavaScript中null与undefined分析
2009/07/25 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
在Python中使用__slots__方法的详细教程
2015/04/28 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
python获取文件扩展名的方法
2015/07/06 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
文明教师事迹材料
2014/01/16 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
甲午大海战观后感
2015/06/02 职场文书
担保书格式范文
2015/09/22 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
sql注入教程之类型以及提交注入
2021/08/02 MySQL
python中super()函数的理解与基本使用
2021/08/30 Python
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技