『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
(一)对鼠标的操作
1、鼠标事件介绍
前面例子中我们已经学习到可以用click()来模拟鼠标的单击操作,而我们在实际的Web产品测试中发现,有关鼠标的操作,不单单只有单击,有时候还要用到右击,双击,拖动等操作,这些操作包含在ActionChains类中。
2、ActionChains 类鼠标操作的常用方法
| 事件 | 说明 |
|---|---|
context_click() |
右击 |
double_click() |
双击(常用) |
drag_and_drop() |
拖动(常用) |
move_to_element() |
鼠标悬停在一个元素上(常用) |
click_and_hold() |
按下鼠标左键在一个元素上 |
注意:Seleniun只能实现在页面中单击右键,但是右键后出现的菜单界面上,还不支持定位,也就不能操作。
3、perform()方法
ActionChains用于生成用户的行为。所有的行为都存储在ActionChains对象。
perform()方法执行所有ActionChains中存储的行为。
4、鼠标事件操作步骤
- 引入包
ActionChains()# 两种导入都可以
from selenium.webdriver import ActionChains
from selenium.webdriver.common.action_chains import ActionChains
这里需要注意的是,在使用
ActionChains类下面的方法之前,要先将包引入。 - 定位需要鼠标操作的元素。
- 执行鼠标事件。
"""
1. 语法:
ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
2. 说明:
driver: wedriver实例执行用户操作,也就是当前浏览器对象。
鼠标事件(元素):双击,拖拽,悬停等动作,需要将操作的元素定位出来并且穿入相应的动作中。
perform() : 执行
"""
# 1. 定位注册按钮
button = driver.find_element_by_css_selector("button[type='submitA']")
# 2. 执行鼠标悬停事件
ActionChains(driver).move_to_element(button).perform()
perform()执行所有ActionChains中存储的行为。
perfrome()同样也是ActionChains类提供的的方法,通常与ActionChains()配合使用。
5、示例
(1)右键单击、左键双击
"""
1.学习目标:
必须掌握鼠标的操作方法
2.语法
2.1 导入ActionChains
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver import ActionChains
2.2 使用方法
ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
2.3 鼠标右键
context_click(需要操作的元素)
2.3 鼠标双击
double_click(需要操作的元素)
3.需求
在百度页面中,完成鼠标右击和鼠标双击动作
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
# from selenium.webdriver.common.action_chains import ActionChains
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开百度页面
url = "https://www.baidu.com/"
driver.get(url)
# 4.在百度首页右键单击、左键双击
# 4.1 右键单击
# 4.1.1 定位百度首页logo
logo = driver.find_element_by_css_selector("#lg > map > area")
# 4.1.2 在logo图片上右击鼠标
ActionChains(driver).context_click(logo).perform()
# 4.2 左键双击 百度一下
# 4.2.1 定位百度输入框
baidu_element = driver.find_element_by_id("kw")
# 4.2.2 在输入框中输入【心善渊&Selenium基础】
baidu_element.send_keys("【心善渊&Selenium基础】")
sleep(3)
# 4.2.3 定位按钮 百度一下
yixia_element = driver.find_element_by_id("su")
# 4.2.4 左键双击 百度一下
ActionChains(driver).double_click(yixia_element).perform()
sleep(3)
# 5.关闭浏览器
driver.quit()
(2)鼠标拖拽动作
动作描述:
- 在源元素上按下鼠标左键,然后移动到目标元素上释放。
source:鼠标拖动的源元素。target:鼠标释放的目标元素。
页码代码片段:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>拖拽div</title>
<style type="text/css">
div {
position: absolute;
width: 150px;
height: 150px;
background-color: red;
}
</style>
<body>
<div id="div1"></div>
<div id="div2" style="left:170px; background-color:green"></div>
</body>
</html>
注:需要自己写拖动脚本,以上只是个样式。
脚本代码:
"""
1.学习目标:
必须掌握鼠标拖拽的使用
2.语法
2.1 导入ActionChains
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver import ActionChains
2.2 使用方法
ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
2.3 鼠标拖拽动作
(1)把一个元素,拖拽到目标元素位置
drag_and_drop(起始元素,终止元素)
(2)把一个元素拖动到页面指定位置
drag_and_drop_by_offset(元素, 横坐标, 纵坐标)
3.需求
在页面中,完成鼠标拖拽动作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver import ActionChains
# from selenium.webdriver.common.action_chains import ActionChains
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./练习页面/drop.html")
driver.get(url)
# 4.使用鼠标拖拽方法
# 4.1 把一个元素,拖拽到目标元素位置
# 4.1.1 定位起始元素和终止元素
red = driver.find_element_by_id("div1") # 定位红色
green = driver.find_element_by_id("div2") # 定位绿色
sleep(2)
# 4.1.2 执行鼠标拖拽
ActionChains(driver).drag_and_drop(red, green).perform()
sleep(2)
# 4.2 将绿色元素拖动到页面指定位置
# 4.2.1 定位绿色元素
green_1 = driver.find_element_by_id("div1")
# 4.2.2 执行鼠标拖拽,(600, 200)为坐标
ActionChains(driver).drag_and_drop_by_offset(green_1, 600, 200).perform()
# 5.关闭浏览器
driver.quit()
(3)鼠标悬停、按下动作
页面代码片段:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>注册A</title>
<style type="text/css">
/*悬停-绿色*/
button:hover {
padding: 10px;
background: green;
}
/*按下状态-红色*/
button:active {
padding: 10px;
background: red;
}
</style>
</head>
<body>
<form action="">
<div id="zc">
<p>
<button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
</p>
</div>
</form>
</body>
</html>
脚本代码:
"""
1.学习目标:
必须掌握鼠标悬停、按下的操作方法
2.语法
2.1 导入ActionChains
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver import ActionChains
2.2 使用方法
ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
2.3 鼠标悬停
move_to_element(需要操作的元素)
2.4 鼠标按下
click_and_hold(需要操作的元素)
3.需求
在页面中,完成上述操作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver import ActionChains
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./4.html")
driver.get(url)
sleep(2)
# 4.对注册按钮,执行鼠标悬停、按下事件
# 4.1 鼠标悬停-按钮变黄
# 4.1.1 定位注册按钮
button = driver.find_element_by_css_selector("button[type='submitA']")
# 4.1.2 执行鼠标悬停事件
ActionChains(driver).move_to_element(button).perform()
sleep(3)
# 4.2 鼠标按下,按钮变红
# 4.2.1 执行鼠标按下事件
ActionChains(driver).click_and_hold(button).perform()
sleep(3)
# 5.关闭浏览器
driver.quit()
(三)对键盘的操作
1、键盘事件介绍
我们在实际的测试工作中,有时候我们在测试时需要使用tab键将焦点转移到下一个元素,用于验证元素的排序是否正确。
webdriver的Keys()类提供键盘上所有按键的操作,甚至可以模拟一些组合建的操作,如Ctrl+A,Ctrl+C,Ctrl+V 等。
在Selenium中使用send_keys()来执行模拟键盘上所有按键的操作。
2、使用Keys类来处理键盘操作
| Keys类键盘事件 | 作用说明 |
|---|---|
send_keys(Keys.BACK_SPACE) |
删除键(Backspace) |
send_keys(Keys.SPACE) |
空格键(Space) |
send_keys(Keys.TAB) |
Tab键 |
send_keys(Keys.ESCAPE) |
回退键(Esc) |
send_keys(Keys.ENTER) |
回车键(Enter) |
send_keys(Keys.CONTROL,'a') |
全选(Ctrl+A) |
send_keys(Keys.CONTROL,'c') |
复制(Ctrl+C) |
send_keys(Keys.CONTROL,'x') |
剪切(Ctrl+X) |
send_keys(Keys.CONTROL,'v') |
粘贴(Ctrl+V) |
send_keys(Keys.F1) |
键盘F1 |
send_keys(Keys.F12) |
键盘F12 |
3、键盘事件练习
页面代码片段:
<!DOCTYPE html>
<html lang="zh-cn">
<body>
<div id="zc">
<legend>注册用户A</legend>
<p id="p1">
<label for="userA">账号A</label>
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
</p>
<p>
<label for="password">密码A</label>
<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
</p>
</div>
</body>
</html>
脚本代码:
"""
1.学习目标:
掌握selenium中键盘事件的操作
2.语法
2.1 导入Keys类
from selenium.webdriver.common.keys import Keys
2.2 使用
元素.send_keys(键名称)
1.单个键使用
(Keys.键名称)
注意:键名称全大写字母
2.组合键
(Keys.键名称,"c")
3.需求
在页面中,完成文字内容的复制操作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver.common.keys import Keys
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
# 4.键盘事件
# 在账号A中输入"Selenium",将输入的内容复制到密码A输入框中
# 4.1 定位账号A和电话A
textA = driver.find_element_by_id("userA") # 账号A
passwordA = driver.find_element_by_id("passwordA") # 密码A
# 4.2 在账号A中输入"Selenium"
textA.clear()
textA.send_keys("Seleniumm")
sleep(2)
# 4.3 使用退格键删除m字母
textA.send_keys(Keys.BACKSPACE)
sleep(2)
# 4.4 将账号A中的文字复制
# 全选账号A中的文字
textA.send_keys(Keys.CONTROL, "a")
# 复制账号A中的文字
textA.send_keys(Keys.CONTROL, "c")
# 4.5 将复制的内容粘贴到密码A输入框中
passwordA.send_keys(Keys.CONTROL, "v")
# 5.关闭浏览器
sleep(2)
driver.quit()
『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件的更多相关文章
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载
目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...
- 『心善渊』Selenium3.0基础 — 20、Selenium对Cookie的操作
目录 1.Cookie介绍 2.Session介绍 3.Cookie工作原理图解 4.Cookie内容参数说明 5.Selenium操作Cookie的API 6.Selenium操作Cookie的示例 ...
- 『心善渊』Selenium3.0基础 — 17、Selenium操作浏览器窗口的滚动条
目录 1.为什么操作滚动条 2.Selenium如何操作滚动条 3.Selenium操作滚动条方法 4.操作滚动条示例 5.下拉至聚焦元素的位置 (1)实现步骤: (2)实现示例: 1.为什么操作滚动 ...
- 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)
目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...
- 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API
目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
随机推荐
- centos7 启动引导顺序
查看默认启动项 grub2-editenv list 查看启动项列表 awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg 设 ...
- 攻防世界 WriteUp
附:|>>>攻防世界-WEB-新手练习区<<<| WriteUp目录 01.|>>>baby_web<<<| 02.|>& ...
- /var/log/syslog日志usb接口
p:~# cat /proc/bus/input/devices |grep usbP: Phys=usb-0000:00:05.1-1/buttonS: Sysfs=/devices/pci0000 ...
- kvm虚拟化网络管理(5)
一.Linux Bridge网桥管理 网络虚拟化是虚拟化技术中最复杂的部分,也是非常重要的资源. 第一节中我们创建了一个名为br0的linux-bridge网桥,如果在此网桥上新建一台vm,如下图: ...
- 串口1配合DMA接收不定长数据(空闲中断+DMA接收)
1.空闲中断和别的接收完成(一个字节)中断,发送完成(发送寄存器控)中断的一样是串口中断: 2.空闲中断是接收到一个数据以后,接收停顿超过一字节时间 认为桢收完,总线空闲中断是在检测到在接收数据后, ...
- Django(37)配置django日志
前言 django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪.错误代码之类的详细信息. ...
- 代码动态更换MeshRenderer的材质Materials
public class metrailstest : MonoBehaviour { Material[] m; Material i; public Material[] n; int index ...
- 为鸿蒙OS说两句公道话(我对鸿蒙OS的一些看法)
为鸿蒙说两句公道话 今天看了鸿蒙系统的评测,看完后我感觉很欣慰,为什么这么说 ? 不是很多人吐槽鸿蒙是 Android 套壳吗 ?或者叫鸿蒙 UI 吗?说鸿蒙没有自己的核心技术.看了鸿蒙系统的设计,底 ...
- [leetcode] 48. 旋转图像(Java)(模拟)
48. 旋转图像 模拟题,其实挺不喜欢做模拟题的... 其实这题一层一层的转就好了,外层转完里层再转,其实就是可重叠的子问题了. 转的时候呢,一个数一个数的转,一个数带动四个数.如图所示,2这个数应该 ...
- TensorFlow分布式在Amazon AWS上运行
TensorFlow分布式在Amazon AWS上运行 Amazon AWS 提供采用 NVIDIA K8 GPU 的 P2.x 机器.为了能够使用,第一步还需要创建一个 Amazon AWS 账户, ...