Python中Selenium模拟JQuery滑动解锁实例


Posted in Python onJuly 26, 2017

本文介绍了Python中Selenium模拟JQuery滑动解锁实例,分享给大家,也给自己留个笔记

滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路。

首先先看个例子。

Python中Selenium模拟JQuery滑动解锁实例

当我手动点击滑块时,改变的只是样式:

1、slide-to-unlock-handle 表示滑块,滑块的左边距在变大(因为它在向右移动嘛!)

2、Slide-tounlock-progress 表示滑过之后的背景黄色,黄色的宽度在增加,因为滑动经过的地方都变黄了。

除些之外,没其它任何变化了,所以我们利用鼠标的拖动貌似不行!因为鼠标的拖动是将一个元素移动到另一个元素上。这样:

# 定位元素的原位置
element = driver.find_element_by_id("xx")
# 定位元素要移动到的目标位置
target = driver.find_element_by_id("xx")

ActionChains(driver).drag_and_drop(element, target).perform()

但在我手动演示的过程中,元素的位置并没有发生变化。

接下来看我是怎么实现的。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import UnexpectedAlertPresentException
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.helloweba.com/demo/2017/unlock/")


dragger = driver.find_elements_by_class_name("slide-to-unlock-handle")[0]

action = ActionChains(driver)

action.click_and_hold(dragger).perform() #鼠标左键按下不放

for index in range(200):
  try:
    action.move_by_offset(2, 0).perform() #平行移动鼠标
  except UnexpectedAlertPresentException:
    break
  action.reset_actions()
  sleep(0.1) #等待停顿时间


# 打印警告框提示
success_text = driver.switch_to.alert.text
print(success_text)

sleep(5)

driver.quit()

driver.find_elements_by_class_name("slide-to-unlock-handle")[0]

首先,我要操作的页面上有好几个滑块,我先通过通过class属性找到所有的里面的第一个。

click_and_hold()

通过click_and_hold()方法对滑块按下鼠标左键。

move_by_offset()

接下来就是通过for循环动滑块的位置,move_by_offset()方法第一个参数是X轴,第二个参数是Y轴,单位为像素。因为是平行移动,所以Y设置为0。 X每次移动两2个像素。

当解锁成功后会抛UnexpectedAlertPresentException异常,捕捉后跳出循环。

每次循环休眠0.1秒,时间间隔越小,移动越顺滑哟!

核心的几步介绍完了,接下来就是获取警告框上面的提示信息并打印,然后关闭浏览器。

打印结果为:

successfully unlock!

Python中Selenium模拟JQuery滑动解锁实例 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。 

Python 相关文章推荐
python遍历数组的方法小结
Apr 30 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
Python实现包含min函数的栈
Apr 29 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
Jun 12 Python
python奇偶行分开存储实现代码
Mar 19 Python
简单实现python聊天程序
Apr 01 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
Python常用库大全及简要说明
Jan 17 Python
基于Python词云分析政府工作报告关键词
Jun 02 Python
python执行js代码的方法
May 13 Python
Python列表和元组的定义与使用操作示例
Jul 26 #Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 #Python
python基础之入门必看操作
Jul 26 #Python
Python简单定义与使用字典dict的方法示例
Jul 25 #Python
Python学习入门之区块链详解
Jul 25 #Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 #Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 #Python
You might like
php二维数组排序详解
2013/11/06 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
Python查找相似单词的方法
2015/03/05 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
python中Apriori算法实现讲解
2017/12/10 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
python线程的几种创建方式详解
2019/08/29 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
治庸问责心得体会
2014/09/12 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
技术负责人岗位职责
2015/02/10 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python