首页 > 其他分享 >Selenium14--模拟鼠标操作

Selenium14--模拟鼠标操作

时间:2022-12-13 00:33:18浏览次数:66  
标签:perform 鼠标 -- Selenium14 driver element click ActionChains find

模拟鼠标操作

  • 在实际场景中,会有单击、长时间单击、双击、右击、拖放、移动等鼠标操作,或在当前光标位置的按键输入或鼠标操作。
  • 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()

标签:perform,鼠标,--,Selenium14,driver,element,click,ActionChains,find
From: https://www.cnblogs.com/sean-test/p/16977532.html

相关文章

  • DTU
    DTU是专门用于将串口数据转换为IP数据或将IP数据转换为串口数据,通过无线通信网络进行传送的无线终端设备。一般安装在常规的开闭所、户外小型开闭所、环网所、小型变电站、......
  • C/C++高校教室管理系统
    C/C++高校教室管理系统4、高校教室管理系统问题描述:设计并实现一个教室管理系统,教室需设置不同的类型,系统可以实现对教室信息的添加,修改,删除,查找等功能,教室信息需要以......
  • webpack学习笔记之优化缓存、合并、懒加载
    除了的webpack基本配置,还可以进一步添加配置,优化合并文件,加快编译速度。下面是生产环境配置文件webpack.production.js,与wenbpack.config.js相比其不需要一些dev-tools,dev......
  • C/C++代理商管理系统
    C/C++代理商管理系统6.19代理商管理系统[问题详述]某企业的若干种产品通过代理商销往全国各地。要求编写代理商管理系统,实现对代理商和所经销产品的管理,系统提供一定......
  • AWS-自建集群K8s-Master控制面板
    control-planeinit-kubeadm.yaml#catinit-kubeadm.yamlapiVersion:kubeadm.k8s.io/v1beta3bootstrapTokens:-groups:-system:bootstrappers:kubeadm:defaul......
  • 目前(12月13日)我的网站长这样~
    直接上源码:index.html<html> <head> <metacharset="utf-8"> <title>首页-HT</title> <script> window.oncontextmenu=function(e){ e.preventDefault......
  • Selenium4+Python3系列(十三) - 与docker中的jenkins持续集成
    前言文章更新到这一篇时,其实我还是很开心的,因为这也正是这系列教程的最后一篇文章,也算是完成了一个阶段性的小目标,也很感谢那些愿意看我文章与我交流学习的同学,感谢有你们......
  • AWS-自建集群K8s-Calico部署
    CalicoInstall镜像下载dockerpulldocker.io/calico/cni:v3.24.5dockerpulldocker.io/calico/node:v3.24.5dockerpulldocker.io/calico/kube-controllers:v3.24.......
  • C++ Primer (5th) 3.21
    #include<iostream>#include<vector>usingnamespacestd;usingstd::vector;intmain(intargc,charconst*argv[]){vector<int>v1;vector<int>v2(......
  • 设置Anaconda下的Jupyter Notebook的代码提示
    打开Anaconda的命令行1.打开AnacondaNavigator,点击Environments->base(root)->OpenTerminal:修改Anaconda下的pip镜像源只修改conda的镜像源对pip命令并不起作......