Web 高级控件交互方法
简介
Selenium 为 3 种输入源提供了接口:键盘设备的键输入,鼠标、笔或触摸设备的输入,以及滚轮设备的滚轮输入(在 Selenum4.2 中引入)。Selenium 允许构建分配给特定输入的独立操作命令,会将他们链接在一起,并调用关联的执行方法一次执行它们。
Selenium 为 3 种输入源提供了接口:键盘设备的键输入,鼠标、笔或触摸设备的输入,以及滚轮设备的滚轮输入 在 Selenum 4.2 中引入 。Selenium 允许构建分配给特定输入的独立操作命令,会将他们链接在一起,并调用关联的执行方法一次执行它们。
ActionChains 解析
# 引入依赖
from selenium.webdriver import ActionChains
ActionChains(driver).some_action().perform()
driver
:是一个 Selenium WebDriver 对象。some_action()
:是指一系列操作,例如鼠标操作、键盘操作或其它页面交互的操作。perform()
方法是 Selenium 中ActionChains
类的一个方法,用于执行先前构建的一系列操作,如鼠标或键盘操作。
ActionChains 是 Selenium Python 库中的一个类,用于执行一系列复杂的鼠标和键盘操作,例如鼠标移动,鼠标点击事件,键盘输入。这个类允许将多个操作链接在一起,以便执行多个步骤的操作序列
通常,需要创建一个ActionChains
对象,然后使用它来定义一系列鼠标和键盘操作,最后使用perform
方法来执行这些操作。
键盘操作
下面我们来看一下键盘事件,看看selenium是如何模仿我们的键盘操作的。
按键
我们来看一下按键除了我们的a, b, c, d,其他键盘按键被分配了一些 unicode 值以用于操作 Selenium 每种语言都有自己的方式来使用这些按键,以下是完整列表
我们来看一下按键除了我们的a, b, c, d,其他键盘按键被分配了一些 unicode 值以用于操作 Selenium 每种语言都有自己的方式来使用这些按键,以下是完整列表
输入字符
ActionChains(driver)\
.send_keys("abc")\
.perform()
send keys 是 Selenium 中 Action Chains 类的一个方法,用于模拟在浏览器中输入字符。这个方法通常用于填写表单字段或模拟键盘输入。在这个示例中,模拟了在浏览器中输入字符 a b c ,并使用 perform 方法来执行此操作。
指定元素输入字符
element
:是要输入文本的目标元素,通常是通过find_elemnt()
或其它方法获取的。
send_keys_to_element()
是 Selenium 中ActionChains
类的一个方法,用于模拟在特定元素中输入文本。
text_input = driver.find_element(By.ID, "textInput")
ActionChains(driver)\
.send_keys_to_element(text_input, "abc")\
.perform()
在这个示例中,先获取到了目标元素,然后将 a b c 输入到该元素中。可以模拟在目标元素中输入字符的操作。
按下按键
ActionChains(driver)\
.key_down(Keys.SHIFT)\
.send_keys("abc")\
.perform()
在这个示例中,模拟了按下 Shift 键,然后输入 abc,实际上会在文本字段输入"ABC",因为 Shift 键被按下,所以输入的字符是大写的。可以模拟在输入大写字符时按下 Shift 键的效果。
释放按键
ActionChains(driver)\
.key_down(Keys.SHIFT)\
.send_keys("a")\
.key_up(Keys.SHIFT)\
.send_keys("b")\
.perform()
在这个示例中,模拟了 Shift 键,然后输入一个小写字符"a",接着释放(松开)Shift 键,最后再输入字符"b"。这可以模拟在输入时切换大写和小写字符的效果。
组合键
cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL
ActionChains(driver)\
.send_keys("Selenium!")\
.send_keys(Keys.ARROW_LEFT)\
.key_down(Keys.SHIFT)\
.send_keys(Keys.ARROW_UP)\
.key_up(Keys.SHIFT)\
.key_down(cmd_ctrl)\
.send_keys("xvv")\
.key_up(cmd_ctrl)\
.perform()
下面是复制粘贴,使用上述所有的方法执行复制/粘贴的操作。需要注意的一点是,用于此操作的键位会有所不同,具体取决于是 Windows 还是 Mac OS。
鼠标操作
按下按钮,松开按下的按钮,然后移动鼠标。
鼠标操作只有 3 个操作可以使用 按下按钮,松开按下的按钮,然后移动鼠标。
单击并按住
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\
.click_and_hold(clickable)\
.perform()
在这个示例中,模拟了在目标元素上执行点击并按住的操作。执行点击并按住 clickable 元素,然后通过 perform 方法来实际执行这些操作。
单击并释放
clickable = driver.find_element(By.ID, "click")
ActionChains(driver)\
.click(clickable)\
.perform()
click是 Selenium 中Action Chains 类的一个方法,用于模拟鼠标单击的操作。例如单击按钮、链接或其它交互元素。在这个示例中,模拟了在目标元素上执行单击的操作。执行单击 clickable 元素,然后通过 perform 方法来实际执行这些操作。
右键单击并释放
clickable = driver.find_element(By.ID, "click")
ActionChains(driver)\
.context_click(clickable)\
.perform()
在这个示例中,context click模拟了在目标元素上执行右键单击的操作。在clickable元素上执行右键单击的操作,然后通过perform方法来实际执行这些操作。
双击
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\
.double_click(clickable)\
.perform()
在这个示例中,我们使用double click模拟了在目标元素上执行双击的操作。在clickable元素上执行双击的操作,然后通过perform方法来实际执行这些操作。
移到到元素(悬浮操作)
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver)\
.move_to_element(hoverable)\
.perform()
在这个示例中,move to element模拟了鼠标光标移动到目标元素上的操作,将鼠标光标移动到 hover 元素上,从而触发浮动菜单或执行其它与鼠标悬停相关的操作。
拖放元素 1 到元素 2 上
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver)\
.drag_and_drop(draggable, droppable)\
.perform()
在这个示例中,我们用到两个元素,我们调用 drag and drop 模拟了通过鼠标拖动一个元素,将其移动到另一个位置。将 draggable 元素移动到 droppable 元素上。
滚动操作
滚轮/滚动操作-滚动到元素
iframe = driver.find_element(By.TAG_NAME, "iframe")
ActionChains(driver)\
.scroll_to_element(iframe)\
.perform()
在这段示例中,scroll to element将页面滚动到一个元素对象。
滚轮/滚动操作-根据坐标滚动
footer = driver.find_element(By.TAG_NAME, "footer")
delta_y = footer.rect['y']
ActionChains(driver)\
.scroll_by_amount(0, delta_y)\
.perform()
在这段示例中,scroll by amount将页面滚动到 footer 元素,点一个蚕食是滚轮在x轴上滑动,即左右滑动 负值表示向左滚动,第二个参数是在y轴上滑动,即上下滑动 负值表示向上滚动。
总结
web 控件交互多以动作集 action_chain 来实现,掌握 Actions 的用法,可以帮助我们在页面测试时更好地模拟用户操作。
web 控件交互多以动作集 action_chain 来实现,掌握 Actions 的用法,可以帮助我们在页面测试时更好地模拟用户操作。