Web控件的交互进阶

一、简介

  • 用于向Web浏览器提供虚拟化设备输入操作的接口。

  • 除了高级元素交互之外,Action接口还提供了,对指定输入设备可以执行的确切操作的精细控制。

  • Selenium为2种输入源提供了接口:键盘设备的输入,鼠标、笔或触摸设备的输入,以及滚动设备的滚轮输入(在Selenium4.2中引入)。

  • Selenium允许构建分配给特定输入的独立操作命令,会将他们连接在一起,并调用关联的执行方法一次执行它们。

二、使用场景

使用场景 对应事件
复制粘贴 键盘事件
拖动元素到某个位置 鼠标事件
鼠标悬停 鼠标事件
滚动到某个元素 滚动事件
使用触控笔点击 触控笔事件(了解即可)

三、ActionChains解析

3.1 语法讲解

  • Python引入依赖
# 引入依赖
from selenium.webdriver import ActionChains
  • ActionChains是Selenium Python库中的一个类,用于执行一系列复杂的鼠标和键盘操作,例如鼠标移动,鼠标点击事件,键盘输入。这个类允许将多个操作连接在一起,以便执行多个步骤的操作序列。
ActionChains(driver).some_action().perform()
  • driver:是一个Selenium WebDriver对象。
  • some_action():是指一系列操作,如鼠标操作、键盘操作或其他页面交互的操作等。
  • perform():是Selenium中ActionChains类的一个方法,用于执行先前构建的一系列操作,如鼠标或键盘操作。

通常,需要创建一个ActionChains对象,然后使用它来定义一系列鼠标或键盘操作,最后使用perform方法来执行这些操作。

3.2 暂停

  • 指针移动和滚轮滚动允许用户设置操作的持续时间,但有时只需要在操作之间等待一下,即可正常工作。

  • 实现方式:pause(1)表示暂停一秒。

3.3 释放所有ActionChains

  • 需要重点注意的一点是,驱动程序会记住整个会话中所有输入项的状态。即使创建actions类的新实例,按下的键和指针的位置,也将处于以前执行的操作离开他们的任何状态。

  • 有一种特殊的方法来释放所有当前按下的键和指针按钮。此方法在每种语言的实现方式不同,因为它不会使用perform方法执行。

  • Python语法:

ActionBuilder(driver).clear_actions()

四、键盘操作

  • 只有两个操作可以使用键盘完成:按下某个键,以及释放(松开)一个按下的键,除了支持ASCII字符外,每个键盘按键还具有可以按特定顺序按下或释放的表现形式。

4.1 按键

  • 除了由常规Unicode表示的按键,其他键盘按键被分配了一些Unicode值,以用于操作Selenium。

  • 每种语言都有自己的方式来使用这些按键,以下是完整列表:

4.2 输入字符

ActionChains(driver).send_keys(keys_to_send).perform()
  • send_keys()是Selenium中ActionChains类的一个方法,用于模拟在浏览器中输入字符。这个方法通常用于填写表单字段或模拟键盘输入。

  • Python语法:

ActionChains(driver)\
       .send_keys("123sfg")\
       .perform()

4.3 指定元素输入字符

ActionChains(driver).send_keys_to_element(element,keys_to_send).perform()
  • element:是要输入文本的目标元素,通常是通过find_element()或其他方法获取的。

  • send_keys_to_element():是Selenium中ActionChains类的一个方法,用于模拟在特定元素中输入文本。

  • Python语法:

text_input = driver.find_element(By.ID,"textInput")
ActionChains(driver)\
         .send_keys_to_element(text_input,"abc")\
         .perform()

4.4 按下按键

ActionChains(driver).key_down(value,element).perform()
  • value:是要按下的键盘按键的键码或键名。例如,Keys.SHIFT表示按下Shift键。

  • element:是要执行按键操作的WebElement对象。

  • key_down():是Selenium中ActionChains类的一个方法,用于模拟按下键盘上的按键。

  • Python语法:

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

4.5 释放按键

ActionChains(driver).key_up(value,element).perform()
  • key_up()是Selenium中ActionChains类的一个方法,用于模拟释放(松开)键盘上的按键。

  • Python语法:

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

4.6 复制粘贴

  • 下面是使用上述所有方法执行复制/粘贴的操作。需要注意的一点是,用于次操作的键位会有所不同,具体取决于是Windows还是Mac OS。

  • Python语法:

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

五、鼠标操作

  • 只有3个操作可以使用鼠标完成:按下按钮、松开按下的按钮,然后移动鼠标。

5.1 单击并按住

ActionChains(driver).click_and_hold().perform()
  • click_and_hold()是Selenium中ActionChains类的一个方法,用于模拟鼠标点击并按住的操作,这个操作通常用于模拟拖拽操作或其他需要按住鼠标按钮的交互。

  • Python语法:

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

5.2 单击并释放

ActionChains(driver).click(WebElement).perform()
  • click()是Selenium元素中ActionChains类的一个方法,用于模拟鼠标单击的操作。例如单击按钮、链接或其他交互元素。

  • Python语法:

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

5.3 备用按钮点击

  • 鼠标功定义了5个按钮:
    • 0——左按钮(默认值)
    • 1——中间按钮(当前不支持)
    • 2——右键
    • 3——X1(后退)按钮
    • 4——X2(前进)按钮

5.4 右键单击并释放

ActionChains(driver).context_click(WebElement).perform()
  • context_click()是Selenium中ActionChains类的一个方法,用于模拟鼠标右键单击的操作,触发上下文菜单,或执行与右键单击相关的其他操作。

  • Python语法:

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

5.5 后退点击

  • 没有方便的方法,只需要按下并释放鼠标按钮3。

  • Python语法:

action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()

5.6 前进点击

  • 没有方便的方法,只需要按下并释放鼠标按钮4。

  • Python语法:

action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()

5.7 双击

ActionChains(driver).double_click(WebElement).perform()
  • context_click()是Selenium中ActionChains类的一个方法,用于模拟在指定的WebElement上执行双击操作。

  • Python语法:

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

5.8 移动到元素(悬浮操作)

ActionChains(driver).move_to_element(WebElement).perform()
  • move_to_element()是Selenium中ActionChains类的一个方法,用户模拟将鼠标光标移动到指定WebElement元素上。通常用于触发浮动菜单、工具提示,或执行与鼠标悬停相关的操作。

  • Python语法:

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

5.9 拖放元素1到元素2上

ActionChains(driver).drag_and_drop(source,target).perform()
  • source:代表源元素(要拖动的元素)。

  • target:打标目标元素(要将源元素拖动到的位置)。

  • drag_and_drop()是Selenium中ActionChains类的一个方法,用于模拟拖拽操作,此方法对源元素执行单击并按住,移动到目标元素的位置,然后释放鼠标。特别是在需要进行拖拽操作的自动化测试中非常有用。

  • Python语法:

dragable = driver.find_element(By.ID,"dragable")
dropable = driver.find_element(By.ID,"dropable")
ActionChains(driver)\
          .drag_and_drop(dragable,dropable)\
          .perform()

六、滚动操作

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

ActionChains(driver).scroll_to_element(element).perform()
  • element:一个WebElement对象,代表要滚动到的页面元素。

  • scroll_to_element是Selenium中ActionChains类中的方法,用于执行页面滚动操作,将页面滚动到指定的元素(WebElement)可见位置。这个方法用于确保可以与页面上的特定元素进行交互,尤其是当页面很长或者需要滚动才能访问元素时。

  • Python语法:

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

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

ActionChains(driver).scroll_by_amount(delta_x:int,delta_y:int).perform()
  • delta_x:使用滚轮在X轴上滚动的距离。负值表示向左滚动。

  • delta_y:使用滚轮在Y轴上滚动的距离。负值表示向上滚动。

  • scroll_by_amount():是Selenium中ActionChains类中的方法,用于按照指定的距离流动页面。将页面滚动指定的距离,以将页面上的内容或元素带入视野。

  • Python语法:

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

写的不错点个赞,让我又复习了一遍。