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 相关文章推荐
JS定时关闭窗口的实例
May 22 Javascript
jQuery实现的多级下拉菜单效果代码
Aug 24 Javascript
Angularjs material 实现搜索框功能
Mar 08 Javascript
js选择器全面解析
Jun 27 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
AngularJS ng-repeat数组有重复值的解决方法
Oct 23 Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 Javascript
值得分享和收藏的xmlplus组件学习教程
May 05 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
Aug 25 Javascript
vue写h5页面的方法总结
Feb 12 Javascript
vue中destroyed方法的使用说明
Jul 21 Javascript
vue 验证两次输入的密码是否一致的方法示例
Sep 29 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
js布局实现单选按钮控件
2020/01/17 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
给Python入门者的一些编程建议
2015/06/15 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
求职信格式范本
2013/11/15 职场文书
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
校园招聘策划书
2014/01/09 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
感恩父母主题班会
2015/08/12 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
Python源码解析之List
2021/05/21 Python