selenium+python自动化测试之鼠标和键盘事件


Posted in Python onJanuary 23, 2019

前面的例子中,点击事件都是通过click()方法实现鼠标的点击事件。其实在WebDriver中,提供了许多鼠标操作的方法,这些操作方法都封装在ActionChains类中,包括鼠标右击、双击、悬停和鼠标拖动等功能。

ActionChains类提供的鼠标操作事件

  • context_click():点击鼠标右键
  • double_click():双击鼠标
  • drag_and_drop():拖动鼠标
  • move_to_element():鼠标悬停

鼠标悬停

页面上有些下拉菜单,在鼠标放到元素上以后,下面的菜单才会显示出来。下面的图片就是一个例子

selenium+python自动化测试之鼠标和键盘事件

百度首页上的设置项,下面的菜单默认不会显示,将鼠标停在上面后才会显示,这就是鼠标的悬停操作,菜单显示以后就可以对下面的项进行点击操作

进入搜索设置的代码

# -*- coding: utf-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)

settings = driver.find_element_by_link_text('设置')
webdriver.ActionChains(driver).move_to_element(settings).perform()

time.sleep(1)

settings_search = driver.find_element_by_class_name('setpref')
settings_search.click()

time.sleep(3)
driver.close()

打开页面后,根据链接的文本信息找到设置项,使用ActionChains的move_to_element()方法将鼠标悬停在设置上,然后找到搜索设置项

鼠标的右击、双击和拖动事件都是通过上述的方法调用,只要将方法替换一下就可以了。拖动事件需要传入两个参数,第一个参数是拖动的起点元素,第二个参数是终点元素

webdriver.ActionChains(driver).context_click("右击的元素定位").perform() #右击事件
webdriver.ActionChains(driver).double_click("双击的元素定位").perform() #双击事件
webdriver.ActionChains(driver).drag_and_drop("拖动的起点元素", "拖动的终点元素").perform() #拖动事件

键盘事件

Keys类中提供了几乎所有的键盘事件,在鼠标事件中用到了两个键盘事件,键盘的向下按键(send_keys(Keys.DOWN))和键盘的回车事件(send_keys(Keys.ENTER))。键盘的事件需要导入Keys模块

from selenium.webdriver.common.keys import Keys

所有的键盘事件都包含在这个模块中,send_keys用来模拟键盘输入,除此之外,还可以用例模拟键盘上的按键,不仅支持单个的键盘按键,还支持组合按键输入

# -*- coding: utf-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)

driver.find_element_by_id('kw').send_keys('selenium') #在搜索框中输入"selenium"
driver.find_element_by_id('kw').send_keys(Keys.SPACE) #输入空格键
driver.find_element_by_id('kw').send_keys('python') #在搜索框中输入"python"
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a') #输入Control+a模拟全选
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'c') #输入Control+c模拟复制
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v') #输入Control+v模拟粘贴
driver.find_element_by_id('kw').send_keys(Keys.ENTER) #输入回车代替点击搜索按钮

time.sleep(3)
driver.close()

下面是一些常用的键盘事件:

? Keys.BACK_SPACE:回退键(BackSpace)
? Keys.TAB:制表键(Tab)
? Keys.ENTER:回车键(Enter)
? Keys.SHIFT:大小写转换键(Shift)
? Keys.CONTROL:Control键(Ctrl)
? Keys.ALT:ALT键(Alt)
? Keys.ESCAPE:返回键(Esc)
? Keys.SPACE:空格键(Space)
? Keys.PAGE_UP:翻页键上(Page Up)
? Keys.PAGE_DOWN:翻页键下(Page Down)
? Keys.END:行尾键(End)
? Keys.HOME:行首键(Home)
? Keys.LEFT:方向键左(Left)
? Keys.UP:方向键上(Up)
? Keys.RIGHT:方向键右(Right)
? Keys.DOWN:方向键下(Down)
? Keys.INSERT:插入键(Insert)
? DELETE:删除键(Delete)
? NUMPAD0 ~ NUMPAD9:数字键1-9
? F1 ~ F12:F1 - F12键
? (Keys.CONTROL, ‘a'):组合键Control+a,全选
? (Keys.CONTROL, ‘c'):组合键Control+c,复制
? (Keys.CONTROL, ‘x'):组合键Control+x,剪切
? (Keys.CONTROL, ‘v'):组合键Control+v,粘贴

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

Python 相关文章推荐
Python判断操作系统类型代码分享
Nov 22 Python
python简单实现基数排序算法
May 16 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python小进度条显示代码
Mar 05 Python
python3 property装饰器实现原理与用法示例
May 15 Python
python可视化爬虫界面之天气查询
Jul 03 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
python使用多线程查询数据库的实现示例
Aug 17 Python
selenium+python自动化测试之页面元素定位
Jan 23 #Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 #Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 #Python
对Python实现累加函数的方法详解
Jan 23 #Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 #Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 #Python
selenium+python自动化测试之环境搭建
Jan 23 #Python
You might like
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
js中有关IE版本检测
2012/01/04 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
Python Requests 基础入门
2016/04/07 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
python selenium firefox使用详解
2019/02/26 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
鲜果饮品店创业计划书
2014/01/21 职场文书
大学校园活动策划书
2014/02/04 职场文书
生日宴会策划方案
2014/06/03 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
抗洪救灾标语
2014/10/08 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书