Selenium14--模拟鼠标操作

模拟鼠标操作

  • 在实际场景中,会有单击、长时间单击、双击、右击、拖放、移动等鼠标操作,或在当前光标位置的按键输入或鼠标操作。
  • selenium提供了名为ActionChains的类来处理这些操作,我们一般翻译为“操作链”或“动作链”。
  • 导入ActionChains类
  from selenium.webdriver.common.action_chains import ActionChains
  • ActionChains类使用前需要先实例化
  变量=ActionChains(driver)
  • ActionChains操作链里的操作方法有:※代表常用

ActionChains执行原理

  • ActionChains执行原理:按照设计好的动作顺序链式执行
    • 当你调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的方法会依次前后执行。

ActionChains基本用法

  • 链式写法
  ActionChains(driver).方法1(参数).方法2(参数).perform()
  # 整套动作
  driver.get('http://sahitest.com/demo/clicks.htm')
 click_btn = driver.find_element(By.XPATH,'//input[@value="click me"]')  # 单击按钮
 doubleclick_btn = driver.find_element(By.XPATH,'//input[@value="dbl click me"]')  # 双击按钮
 rightclick_btn = driver.find_element(By.XPATH,'//input[@value="right click me"]')  # 右键单击按钮
  ActionChains(driver).click(click_btn).double_click(doubleclick_btn).context_click(rightclick_btn).perform()  # 链式写法
 print(driver.find_element(By.NAME,'t2').get_attribute('value'))

  • 分布写法
  # 创建ActionChains对象,构造方法的参数是driver
  变量 = ActionChains(driver)
  变量.方法1(参数) # 参数是元素对象
  变量.方法2(参数)
  变量.perform()
  # 分解动作
  driver.get('http://sahitest.com/demo/mouseover.htm')
  write = driver.find_element(By.XPATH,'//input[@value="Write on hover"]')  # 鼠标移动到此元素,在下面的input框中会显示“Mouse moved”
  blank = driver.find_element(By.XPATH,'//input[@value="Blank on hover"]')  # 鼠标移动到此元素,会清空下面input框中的内容
  result = driver.find_element(By.NAME,'t1')
  action = ActionChains(driver)
  action.move_to_element(write).perform()  # 移动到write
  print(result.get_attribute('value')) # 显示“Mouse moved”
  action.move_to_element(blank).perform()
  print(result.get_attribute('value'))# 显示空

  # 拖拽
  driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
  dragger = driver.find_element(By.ID,'dragger')  # 被拖拽元素
  item1 = driver.find_element(By.XPATH,'//div[text()="Item 1"]')  # 目标1
  action = ActionChains(driver)
  action.drag_and_drop(dragger, item1).perform()  # 移动dragger到目标1
  sleep(3)
  # 注意:拖拽时注意加等待时间,可能因为速度太快而失败。

  """
  当前焦点输入
  点击关键字文本框,连续按下键盘上的Tab键两次,此时当前焦点位于“高级搜索”这个元素,在这个焦点位置按下回车就可以完成它的操作(不需要对高级搜索进行定位)
  """

  # 双击 
  ac1 = ActionChains(driver)
  # 获取要操作的元素对象
  element1 = driver.find_element(定位方法,参数)
  ac1.double_click(element1)
  # 注意:actionchains使用时,调用方法只是往动作链追加一个动作,但是并不会默认执行这个动作,要执行动作链里的所有动作,必须最后调用perform()方法
  ac1.perform()
  # 单击鼠标右键
  ac1 = ActionChains(driver)
  # 获取要操作的元素对象
  element2 = driver.find_element(定位方法,参数)
  ac1.context_click(element2) 
  # 注意:actionchains使用时,调用方法只是往动作链追加一个动作,但是并不会默认执行这个动作,要执行动作链里的所有动作,必须最后调用perform()方法
  ac1.perform()
posted @ 2022-12-13 00:23  暄总-tester  阅读(505)  评论(0)    收藏  举报