Skip to content

Web 高级控件交互方法


简介

Selenium 为 3 种输入源提供了接口:键盘设备的键输入,鼠标、笔或触摸设备的输入,以及滚轮设备的滚轮输入(在 Selenum4.2 中引入)。Selenium 允许构建分配给特定输入的独立操作命令,会将他们链接在一起,并调用关联的执行方法一次执行它们。


ActionChains 解析

# 引入依赖
from selenium.webdriver import ActionChains
ActionChains(driver).some_action().perform()
  • driver:是一个 Selenium WebDriver 对象。
  • some_action():是指一系列操作,例如鼠标操作、键盘操作或其它页面交互的操作。
  • perform()方法是 Selenium 中ActionChains类的一个方法,用于执行先前构建的一系列操作,如鼠标或键盘操作。

键盘操作


按键

我们来看一下按键除了我们的a, b, c, d,其他键盘按键被分配了一些 unicode 值以用于操作 Selenium 每种语言都有自己的方式来使用这些按键,以下是完整列表


输入字符

ActionChains(driver)\
    .send_keys("abc")\
    .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()

按下按键

ActionChains(driver)\
    .key_down(Keys.SHIFT)\
    .send_keys("abc")\
    .perform()

释放按键

ActionChains(driver)\
    .key_down(Keys.SHIFT)\
    .send_keys("a")\
    .key_up(Keys.SHIFT)\
    .send_keys("b")\
    .perform()

组合键

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()

鼠标操作

按下按钮,松开按下的按钮,然后移动鼠标。


单击并按住

clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\
    .click_and_hold(clickable)\
    .perform()

单击并释放

clickable = driver.find_element(By.ID, "click")
ActionChains(driver)\
    .click(clickable)\
    .perform()

右键单击并释放

clickable = driver.find_element(By.ID, "click")
ActionChains(driver)\
    .context_click(clickable)\
    .perform()

双击

clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\
    .double_click(clickable)\
    .perform()

移到到元素(悬浮操作)

hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver)\
    .move_to_element(hoverable)\
    .perform()

拖放元素 1 到元素 2 上

draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver)\
    .drag_and_drop(draggable, droppable)\
    .perform()

滚动操作


滚轮/滚动操作-滚动到元素

iframe = driver.find_element(By.TAG_NAME, "iframe")
ActionChains(driver)\
    .scroll_to_element(iframe)\
    .perform()

滚轮/滚动操作-根据坐标滚动

footer = driver.find_element(By.TAG_NAME, "footer")
delta_y = footer.rect['y']
ActionChains(driver)\
    .scroll_by_amount(0, delta_y)\
    .perform()

总结

web 控件交互多以动作集 action_chain 来实现,掌握 Actions 的用法,可以帮助我们在页面测试时更好地模拟用户操作。