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 相关文章推荐
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
Mar 04 Javascript
使用Math.floor与Math.random取随机整数的方法详解
May 07 Javascript
jquery对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
js事件监听机制(事件捕获)总结
Aug 08 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
去除html代码里面的script正则方法
May 19 Javascript
Bootstrap3 Grid system原理及应用详解
Sep 30 Javascript
jQuery grep()方法详解及实例代码
Oct 30 Javascript
Bootstrap Modal遮罩弹出层代码分享
Nov 21 Javascript
JavaScript实现简易聊天对话框(加滚动条)
Feb 10 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数组是否为空的代码
2011/09/08 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
基于python 处理中文路径的终极解决方法
2018/04/12 Python
基于django传递数据到后端的例子
2019/08/16 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
渡河少年教学反思
2014/02/12 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
房产公证书
2015/01/23 职场文书
复兴之路展览观后感
2015/06/02 职场文书
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers