首页 > 其他分享 >Selenium 进阶技巧:实现 Web 端的鼠标操作功能

Selenium 进阶技巧:实现 Web 端的鼠标操作功能

时间:2024-10-17 09:48:15浏览次数:1  
标签:Web 进阶 ActionChains Selenium driver element chains find selenium

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

一、前言

大家在做selenium测试时,是否会遇到在网页上需要执行一些鼠标操作,如右键选择一些设置,或者双击点赞,双击放到屏幕等等,但是在日常使用中还是习惯使用selenium的基本库,而忽略了其实selenium也是有提供了丰富的鼠标操作库,通过动作链 (ActionChains)就可以实现上述操作。

二、Selenium 4 的鼠标操作

我们今天用到的是selenium内的动作链 (ActionChains),可以模拟鼠标操作,比如左键单击,右键单击、双击、长按等等。但是看名字可以知道,动作链就是将动作行程一整个链条去执行,通过在操作后面加上.perform()去实行操作内容,我们可以通过这样调用:

#创建动作链实例
chains = ActionChains(driver)
#需要操作的元素
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
#执行动作链
chains .move_to_element(menu).click(hidden_submenu).perform()

也可以通过这样调用:

#创建动作链实例
chains = ActionChains(driver)
#需要操作的元素
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
#执行动作链
chains .move_to_element(menu)
chains .click(hidden_submenu)
chains .perform()

但是需要注意的是,.perform()是执行对应所创建的动作链实例内所写的操作,如果有多个操作,且中间会穿插其他selenium操作的话,需要在每次执行.perform()操作之前,重新创建动作链实例,否则会重复执行上一个动作链操作。如:

#创建动作链实例
chains = ActionChains(driver)
#需要操作的元素
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
#执行第一次动作链
chains .move_to_element(menu)
chains .perform()

print(driver.find_element_by_name('t2').get_attribute('value'))
driver.find_element_by_name('t2').click()
....
#重新创建动作链实例
chains = ActionChains(driver)
#执行第二次的动作链
chains .click(hidden_submenu)
chains .perform()

下面我们就来详细看一下每个操作具体的使用方式吧。

2.1 右键

常规在做selenium测试的时候,我们经常使用到的是左键单击,但有时候我们会需要使用到右键点击,唤出对应的相关设置进行使用,可以这时就可以参考下述的代码

#引入对应的动作库
from selenium.webdriver import ActionChains

#创建动作库实例
chains = ActionChains(driver)

#确认需要右键的元素
temp = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")

#实行右键点击
chains.context_click(temp).perform()

2.2 双击

在web端测试时也会经常遇到双击放大视频画面、双击跳转链接等等的情况,这样我们可以参考下述的代码

#引入对应的动作库
from selenium.webdriver import ActionChains

#创建动作库实例
chains = ActionChains(driver)

#确认需要双击的元素
temp = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")

#实行右键点击
chains.double_click(temp).perform()

2.3 长按

上面介绍的都是短按的情况,像日常刷b站视频的时候,也会有出现点赞长按三连的操作,或者是其他长按收藏,长按分享等等的操作,我们都可以参考下述的代码

#引入对应的动作库
from selenium.webdriver import ActionChains

#创建动作库实例
chains = ActionChains(driver)

#确认需要双击的元素
temp = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")

#实行双击
chains.click_and_hold(temp).perform()

2.4 拖动

在web端上拖动操作不是特别常见,但是在动作库中,还是提供了对应的操作函数,具体使用代码可以参考下方

#引入对应的动作库
from selenium.webdriver import ActionChains

#创建动作库实例
chains = ActionChains(driver)

#确认需要拖动的两个元素
d1 = driver.find_element(By.ID,"dragger")
d2 = driver.find_element(By.XPATH,"/html/body/div[2]")

#实行将d1拖动到d2
chains.drag_and_drop(d1, d2).perform()

三、实际使用案例

通过上述的操作讲解,我们可以用一个小小的使用案例去看看整体的跑测效果是怎么样的。可以看到右键操作、长按、拖拽等效果都是满足于我们日常测试的情况的。

selenium操作.gif

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"

from airtest.core.api import *
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.webdriver import ActionChains
from selenium import webdriver

# 设置Chrome选项
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")


# 连接到已打开的Chrome浏览器
driver = webdriver.Chrome(options=chrome_options)

#创建链式实例
chains = ActionChains(driver)

video  = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")
good = driver.find_element(By.XPATH,"//div[@title='点赞(Q)']")

#实行右键点击
chains.context_click(video).perform()
#点击复制视频链接
driver.find_element(By.XPATH,"//li[@data-action='copyLink']").click()
sleep(1.0)

#更新链式实例
chains = ActionChains(driver)

#实行长按点赞操作
chains.click_and_hold(good).perform()
sleep(3.0)

chains = ActionChains(driver)

#通过双击放大视频屏幕
chains.double_click(video).perform()
chains = ActionChains(driver)
sleep(3.0)


#跳转拖拽演示网站
driver.get("https://sahitest.com/demo/dragDropMooTools.htm")

sleep(3.0)

d1 = driver.find_element(By.ID,"dragger")
d2 = driver.find_element(By.XPATH,"/html/body/div[2]")

#实行拖拽操作
chains.drag_and_drop(d1, d2).perform()

四、小结

本周我们介绍了selenium的右键单击、长按、双击、拖拽的操作内容,也引入了selenium的动作链行为库,还有更多的方法可以自己去探索一下,根据自己的需求完善自己的脚本。

如果大家在使用过程中有一些新的使用方式或者遇到了问题,又或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交issue。


AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

官方答疑 Q 群:526033840

标签:Web,进阶,ActionChains,Selenium,driver,element,chains,find,selenium
From: https://www.cnblogs.com/AirtestProject/p/18471448

相关文章

  • IIS配置——关于WebApi部署在IIS长时间不连接后第一次连接响应慢的问题
    0.服务器信息WindowsServer2019StandardIIS:Version:10.0第一次请求响应慢的原因:默认情况下,应用程序池在不活动情况下(无请求操作),一段时间后,将被IIS自动回收掉。1.修改IIS的下述配置应该程序池-->右键,高级设置-->进程模型,闲置超时(分钟)-->默认是20,设置为0......
  • 从零开始学机器学习——构建一个推荐web应用
    首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns今天,我们终于将分类器这一章节学习完活了,和回归一样,最后一章节用来构建web应用程序,我们会回顾之前所学的知识点,并新增一个web应用用来让模型和用户交互。所以今天的主题是美食推荐。美食推荐Web应用程序首......
  • Linux命令进阶
    grep从文件中搜索字符串grep"字符串"文件参数:-n显示行号-R递归及子目录例如grep"hello"log.cgrep"main"*-nRfind在指定路径下搜索文件find路径-name文件名find/home/linux-namehello.c//在/home/linux目录下搜索hello.c管道连接符|说明......
  • selenium登录B站,实现验证码识别登录
    Selenium+超级鹰登录B站需要使用到的包seleniumtimechaojiyingimporttimefromchaojiyingimportChaojiying_Clientfromselenium.webdriverimportChromefromselenium.webdriverimportActionChains注意,如果没有使用过超级鹰的经验可以先看一下开发文档,下......
  • 【CTF-SHOW】Web入门 Web27-身份证日期爆破 【关于bp intruder使用--详记录】
    1.点进去是一个登录系统,有录取名单和学籍信息发现通过姓名和身份证号可以进行录取查询,推测录取查询可能得到学生对应学号和密码,但是身份证号中的出生日期部分未知,所以可以进行爆破2.打开bp抓包这里注意抓的是学院录取查询系统发送POST类型进行查询的包,第一遍抓不到很正......
  • 探索 Python Web 开发:从框架到爬虫
    Python是Web开发中广泛使用的编程语言,因其简单、灵活和强大的生态系统,适合构建各种类型的Web应用和API。在本篇博客中,我们将讨论Web开发的几个重要主题,包括Flask和Django框架、API开发、HTTP请求处理以及网页爬虫的基础。9.1Flask框架基础Flask是一个轻量级......
  • 2024-10-16 前端图片加载方式优化(webp)
    把上传的图片文件格式转化为webp图片格式。前置条件:图片文件存在阿里云oss。阿里云的对象存储服务(OSS)支持在URL中直接指定图片处理参数,这样可以在不下载原始图片到服务器的情况下,直接由OSS服务端处理图片。假设你有一张存在阿里云的图片链接,那么只需要在该链接的末尾加上?x......
  • javaWeb项目-ssm+jsp股票交易管理系统功能介绍
    本项目源码(点击下方链接下载):java-ssm+jsp股票交易管理系统实现源码(项目源码-说明文档)资源-CSDN文库项目关键技术开发工具:IDEA、Eclipse编程语言:Java数据库:MySQL5.7+框架:ssm、Springboot前端:Vue、ElementUI关键技术:springboot、SSM、vue、MYSQL、MAVEN数据库工......
  • Zabbix进阶实战!将告警推送到Syslog服务器详细教程
    需求场景:用户需要将zabbix产生的告警事件推送给rsyslog服务器,syslog服务器再对事件日志进行分析处理.环境配置信息服务器IP地址ZabbixServer192.168.200.195Rsyslog服务器192.168.200.128*Rsyslog服务器防火墙需要放通UDP/514端口推送脚本需要修......
  • Bocha Web Search API:使用Langchain的Agent模式通过Tool Use调用博查 Search API实现L
    上篇文章介绍了国内可用的博查WebSearchAPI,详见:使用博查WebSearchAPI获取搜索引擎的网页链接和文本摘要,给AI/RAG应用增加联网搜索功能本篇讲述一下如何通过LangChain的FunctionCall方式使用它。1.安装LangChainpipinstalllangchainopenai2.获取博查......