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 相关文章推荐
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
javascript发送短信验证码实现代码
Nov 12 Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 Javascript
jQuery基础_入门必看知识点
Jul 04 Javascript
Bootstrap如何激活导航状态
Mar 22 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
常用的9个JavaScript图表库详解
Dec 19 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
原生JS实现九宫格抽奖
Sep 13 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
JS中==、===你分清楚了吗
2020/03/04 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
python实现批量图片格式转换
2020/06/16 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
清扬洗发水广告词
2014/03/14 职场文书
售后服务承诺书模板
2014/05/21 职场文书
2014年路政工作总结
2014/12/10 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
导游词之张家界
2019/10/31 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
了解Redis常见应用场景
2021/06/23 Redis