什么是商城网站建设,如何自己做官网,wordpress电影站主题,乘风专业建站在使用 Selenium WebDriver 做自动化测试的时候#xff0c;会经常模拟鼠标和键盘的一些行为。比如使用鼠标单击、双击、右击、拖拽等动作#xff1b;或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作。在 WebDeriver 中#xff0c;有一个专门的类来负责实现这些测试场…
在使用 Selenium WebDriver 做自动化测试的时候会经常模拟鼠标和键盘的一些行为。比如使用鼠标单击、双击、右击、拖拽等动作或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作。在 WebDeriver 中有一个专门的类来负责实现这些测试场景那就是 ActionChains类在使用该类做键盘操作的过程中会配合使用到 Keys 数据存储类Keys包含键盘上所有特殊按键。
一、鼠标点击操作 click(elementNone) 左击 context_click(elementNone) 右击 double_click(elementNone) 双击 move_to_element(element) 移动鼠标到元素中间悬停 drag_and_drop(source,target) source上按下左键拖动到target元素上 click_and_hold(elementNone) 在元素上按下鼠标左键 release() 释放鼠标 perform() 执行ActionChains中存储的动作 element有None默认值的表示不传入参数该动作在原地执行。
鼠标事件具体使用示例如下
示例1鼠标左键点击
actionActionChains(driver)
action.click() # 在鼠标当前位置单击
action.perform() # 执行action存储的动作# 鼠标在 新闻 元素位置单击
action.click(driver.find_element_by_link_text(新闻)).perform()
注意action.click() 动作并未执行它只是存储在action实例中需要通过action.perform()方法执行存储动作鼠标键盘事件动作动作可以存储多个然后一次性执行。如下执行CytlC
ActionChains(driver).key_down(Keys.CONTROL).send_keys(c).key_up(Keys.CONTROL).perform()
示例2鼠标右击
actionActionChains(driver)
action.context_click().perform() # 在鼠标当前位置右击# 鼠标在 新闻 元素位置右击
action.context_click(driver.find_element_by_link_text(新闻)).perform()
示例3鼠标双击操作
actionActionChains(driver)
action.double_click().perform() # 在鼠标当前位置双击# 鼠标在 新闻 元素位置双击击
action.double_click(driver.find_element_by_link_text(新闻)).perform() 示例4鼠标移动
action ActionChains(driver)
elementdriver.find_element_by_link_text(设置)
# 鼠标移动到 新闻 元素上的中心点
action.move_to_element(element).perform()# 鼠标在原位置向x轴移动xoffset、y轴移动yoffsetxoffset、yoffset可为正负数
action.move_by_offset(-200,100).perform()# 鼠标移动到element元素中心点偏移xoffset、yoffset
action.move_to_element_with_offset(element,-500,600).perform()
action.move_by_offset(xoffset,yoffset) 这里需要注意如果 xoffset 为负数表示横坐标向左移动yoffset 为负数表示纵坐标向上移动。而且如果这两个值大于当前屏幕的大小鼠标只能移到屏幕最边界的位置。
鼠标移动操作在测试环境中比较常用到的场景是需要获取某元素的 flyover/tips实际应用中很多 flyover 只有当鼠标移动到这个元素之后才出现所以这个时候通过执行 move_to_element(to_element) 操作就能达到预期的效果。
根据我个人的经验这个方法对于某些特定产品的图标的 flyover/tips 也不起作用虽然在手动操作的时移动鼠标到这些图标上面可出现 flyover但当使用 WebDriver 来模拟这一操作时虽然方法成功执行但 flyover 却不出来。所以在实际应用中还需要对具体的产品页面做相应的处理。
现在我也找了很多测试的朋友做了一个分享技术的交流群共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源没人解答问题坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化性能安全测试开发等等方面有一定建树的技术大牛
分享他们的经验还会分享很多直播讲座和技术沙龙
可以免费学习划重点开源的
qq群号110685036怕【暗号csdn999】 示例5鼠标悬停
action.click_and_hold().perform() # 鼠标在当前位置按下并不释放
# 鼠标 在设置 上悬停
action.click_and_hold(driver.find_element_by_link_text(设置)).perform()
action.click_and_hold(element) 这个方法实际上是执行了两个动作首先是鼠标移动到元素 element然后再 click_and_hold, 所以这个方法也可以写成 action.move_to_element(element).click_and_hold()。
示例6鼠标拖拽
source driver.find_element_by_id(kw) # 获取起始位置元素
target driver.find_element_by_id(sk) # 获取目标元素
# 将元素source拖动到target的位置
ActionChains(driver).drag_and_drop(source, target).perform()# 鼠标拖拽动作将 source 元素向x、y轴方向移动 (xoffset, yoffset) 其中 xoffset 为横坐标yoffset 为纵坐标。
ActionChains(driver).drag_and_drop_by_offset(source, -100, 100).perform()
在这个拖拽的过程中已经使用到了鼠标的组合动作首先是鼠标点击并按住 click_and_hold( source) 元素然后执行鼠标移动动作 (move_to)移动到 target 元素位置或者是 (xoffset, yoffset) 位置再执行鼠标的释放动作 (release)。所以上面的方法也可以拆分成以下的几个执行动作来完成
ActionChains(driver).click_and_hold(source).move_to_element(target).release().perform()
示例7鼠标释放操
action ActionChains(driver)
action.release().perform() # 释放按下的鼠标
二、键盘操作
对于键盘的模拟操作ActionChains类中有提供了按下key_down(keys)、释放key_up(keys)、按下并释放send_keys(keys_to_send) 等方法。
键盘的操作有普通键盘和修饰键盘两种 。
普通键盘为常用字母数字等修饰键盘为Ctrl、Shift、Alt等修饰键盘一般和其他键组合使用的键。
使用键盘操作时需要引入from selenium.webdriver.common.keys import Keys包Keys 包中含所有特殊用键。
1、普通键盘操作
键盘操作使用send_keys(*keys_to_send)方法该方法支持多个按键连续操作如果需要对某个元素执行按键操作使用send_keys_to_element( element, *keys_to_send)方法。具体使用如下示例
from selenium.webdriver.common.keys import Keys
action ActionChains(driver)
action.send_keys(Keys.SPACE).perform() # 按下并释放空格键
action.send_keys(Keys.TAB).perform() # 按下并释放Tab键
action.send_keys(Keys.BACKSPACE).perform() # 按下并释放Backspace键
action.send_keys(Keys.BACKSPACE,Keys.SPACE).perform() # 连续执行按键动作
action.send_keys(Keys.TAB).send_keys(Keys.TAB).perform() # 也可以这样组合
针对某个元素发出某个键盘的按键操作或者是输入操作element driver.find_element_by_id(query)
# 对一元素使用键盘操作
action.send_keys_to_element(element, selenium).perform()
# 上面动作拆解为下面动作
action.click(element).send_keys(selenium).perform()
注意除了 ActionChains类有 send_keys*keys_to_send方法外WebElement 类也有一个 send_keys_to_element*keys_to_send方法这两个方法对于一般的输入操作基本上相同不同点在于以下几点
第一Actions 中的 send_keys*keys_to_send对修饰键操作后并不会释放也就是说当调用 actions.send_keys(Keys.ALT)、 actions.send_keys(Keys.CONTROL)、 action.send_keys(Keys.SHIFT) 的时候相当于调用 actions.key_down(keys_to_send)而如果在现实的应用中想要模拟按下并且释放这些修饰键应该先action.reset_actions()重设action然后再调用 action.send_keys(keys.NULL).perform()取消按下的修饰键。
第三点在 WebDriver 中我们可以使用 WebElement 类的 send_keys() 来上传附件比如 element.send_keys(“D:\\test\\uploadfile\\test.jpg”)上文件但不能使用ActionChains来上传附件因为type’file’的输入框并不支持键盘输入。 2、修饰键的使用
修饰键是键盘上的一个或者一组特别的键当它与一般按键同时使用时用来临时改变一般键盘的普通行为。
修饰键一般跟普通键组合使用比如 CtrlA、AltF4等。
我们电脑中的修饰键一般有以下几种修Ctrl、Alt(Option)、Shift、AltGr、Windows logo、Command、FN(Function)。一般使用的都是前三种。
对于修饰键的使用在Python selenium中一般使用按下key_down(keys)、释放key_up(keys)、按下并释放send_keys(keys_to_send)组合实现。
action ActionChains(driver)
action.key_down(Keys.CONTROL).perform() # 按下ctrl键
action.key_up(Keys.CONTROL).perform() # 释放ctrl键action.key_down(Keys.SHIFT).perform() # 按下shift键
action.key_up(Keys.SHIFT).perform() # 释放shift键action.key_down(Keys.ALT).perform() # 按下alt键
action.key_up(Keys.ALT).perform() # 释放alt键 示例通过ctrlc 来复制文本
ActionChains(driver).key_down(Keys.CONTROL).send_keys(c).key_up(Keys.CONTROL).perform() 三、WebElement.send_keys()键盘操作
WebElement元素对象下的send_keys也支持组合键盘操作。
代码示例如下
element driver.find_element_by_id(query)
element.send_keys(selenium)
element.send_keys(Keys.BACK_SPACE) # 按BACKSPACE删除一个字符
element.send_keys(Keys.SPACE) # 空格键(Space)
element.send_keys(Keys.CONTROL, a) # 全选CtrlA
element.send_keys(Keys.CONTROL, c) # 复制CtrlC
element.send_keys(Keys.CONTROL, v) # 粘贴Ctrlv
element.send_keys(Keys.TAB) # 制表键(Tab)
element.send_keys(Keys.ESCAPE) # 回退键Esc
element.send_keys(Keys.ENTER) # 回车键Enter
END今天的分享就到此结束了点赞关注不迷路~