Selenium 操作指南:鼠标点击和键盘输入高级技巧

在自动化测试或网页操作中,精确地模拟鼠标点击和键盘输入是至关重要的。Selenium 提供了一个强大的工具——ActionChains 类,它允许用户以编程方式执行复杂的鼠标和键盘操作。本文将深入探讨如何利用 Selenium 的 ActionChains 类来执行鼠标单击、双击、右键点击和键盘输入,包括一些组合键的应用。

#!/usr/bin/python3
# coding=utf-8
"""
@author: Jeffky
@file: demo13.py
@time: 2024-6-19 9:23
"""
from selenium import webdriver
from time import sleepfrom selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import Byclass TestCase(object):def __init__(self):self.driver = webdriver.Chrome()self.driver.maximize_window()def test_mouse(self):self.driver.get('https://sahitest.com/demo/clicks.htm')# 双击btn = self.driver.find_element(By.XPATH,'/html/body/form/input[2]')ActionChains(self.driver).double_click(btn).perform()sleep(2)# 单击btn = self.driver.find_element(By.XPATH,'/html/body/form/input[3]')ActionChains(self.driver).click(btn).perform()sleep(2)# 点击鼠标右键btn = self.driver.find_element(By.XPATH,'/html/body/form/input[4]')ActionChains(self.driver).context_click(btn).perform()sleep(5)def test_key(self):self.driver.get('https://www.baidu.com/')kw = self.driver.find_element(By.ID,'kw')kw.send_keys('selenium')kw.send_keys(Keys.CONTROL,'a')sleep(2)kw.send_keys(Keys.CONTROL,'x')sleep(2)kw.send_keys(Keys.CONTROL,'v')sleep(5)def test_move(self):self.driver.get('https://www.baidu.com/')e = self.driver.find_element(By.LINK_TEXT,'新闻')print(e)# ActionChains(self.driver).move_to_element(e).perform()ActionChains(self.driver).move_to_element(e).click(e).perform()sleep(5)
if __name__ == '__main__':case = TestCase()# case.test_mouse()# case.test_key()case.test_move()

鼠标操作

1. 单击操作

单击是最常用的鼠标操作之一,可以通过click()方法实现。例如,要单击一个按钮,可以先定位到该按钮,然后调用click()方法。

button = driver.find_element(By.ID, 'myButton')
ActionChains(driver).click(button).perform()

2. 双击操作

双击操作可以通过double_click()方法实现。与单击类似,先定位元素然后执行双击。

btn = driver.find_element(By.XPATH, '/html/body/form/input[2]')
ActionChains(driver).double_click(btn).perform()

3. 右键点击

右键点击可以通过context_click()方法实现。这对于触发右键菜单特别有用。

btn = driver.find_element(By.XPATH, '/html/body/form/input[4]')
ActionChains(driver).context_click(btn).perform()

键盘操作

1. 基本键盘输入

使用send_keys()方法可以模拟键盘输入。这在填写表单或在搜索框中输入文本时非常有用。

inputField = driver.find_element(By.ID, 'searchBox')
inputField.send_keys("Selenium")

2. 键盘组合键

send_keys()方法还可以用来模拟组合键,例如 Ctrl+A、Ctrl+C 和 Ctrl+V 等。

inputField = driver.find_element(By.ID, 'kw')
inputField.send_keys("selenium")
inputField.send_keys(Keys.CONTROL, 'a')  # 选中所有文字
inputField.send_keys(Keys.CONTROL, 'c')  # 复制
inputField.send_keys(Keys.CONTROL, 'v')  # 粘贴

高级应用

结合鼠标移动和点击,可以模拟更复杂的用户交互,如悬停效果。

elementToHover = driver.find_element(By.LINK_TEXT, '新闻')
ActionChains(driver).move_to_element(elementToHover).click().perform()

通过上述技巧,你可以有效地使用 Selenium 进行自动化测试或网页操作,模拟几乎任何用户交互。

事件驱动编程与Selenium

在深入了解 Selenium 中的鼠标和键盘事件处理之前,值得从事件驱动编程的角度来理解这些操作的重要性。事件驱动编程是一种编程范式,其中流程的推进是由事件的发生决定的。在图形用户界面(GUIs)中,事件如鼠标点击、键盘按键等是常见的事件类型,它们是用户交互的直接结果。

Selenium 通过模拟这些底层事件,使得自动化测试可以像真实用户一样与网页交互。这种交互模拟让用户能够验证页面的用户界面(UI)行为是否符合预期,例如确认点击按钮后是否会打开正确的对话框,或者验证输入框是否能够正确处理复制粘贴操作。

1. 事件分发机制

当使用 Selenium 进行自动化测试时,它通过WebDriver协议与浏览器通信。WebDriver 协议定义了如何发送命令(如点击或发送按键)到浏览器,并如何处理浏览器的响应。这包括了事件的创建、分发和处理。

  • 事件的创建:通过调用 ActionChains 类中的方法(如 click(), send_keys() 等),Selenium 会在后台创建相应的事件对象。

  • 事件的分发:创建的事件随后被分发到指定的Web元素。这一过程是通过WebDriver与浏览器之间的通信实现的,确保事件被准确投递到页面上的指定元素。

  • 事件的处理:最终,浏览器接收到事件并按照其内建的事件处理机制进行处理,就像真实的用户操作一样。

2. 异常处理

在自动化测试过程中,正确处理可能发生的异常至关重要。例如,如果尝试对不存在的元素执行操作,Selenium 会抛出 NoSuchElementException。能够优雅地处理这些异常对于编写可靠的测试脚本非常重要。

3. 同步问题

由于 Web 页面的动态性,确保测试脚本在继续之前等待元素加载是很重要的。Selenium 提供了多种等待机制,如隐式等待和显式等待,以确保元素在执行操作之前是可交互的。

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myButton")))
ActionChains(driver).move_to_element(element).click().perform()

总结

通过 Selenium 的 ActionChains 类,测试人员可以灵活地模拟各种鼠标和键盘事件,以验证Web应用的行为。理解事件驱动编程的基本概念有助于更有效地使用这些工具,而异常处理和同步机制的合理运用则能确保测试脚本的健壮性和可靠性。借助这些高级技巧,自动化测试不仅能模拟简单操作,还能处理复杂的用户交互场景,从而提高测试覆盖率和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈轨道电路分类

区间:移频轨道电路。 站内:工频交流连续式轨道电路、25Hz相敏轨道电路。 工频交流连续式轨道电路(480轨道电路):采用工频50Hz交流电源,以JZXC-480型继电器为轨道继电器,因而又称JZXC-480型轨道…

今日分享丨点亮这四个技能,你也可以成为可视化专家

引言 以大数据、人工智能等为代表的新质生产力时代已悄然而至,央企、国企逐步意识到数据资源展示对于经营管理的重要性和紧迫性。数据可视化成为连接用户与数据的桥梁,藉由设计师的巧手,把复杂抽象的数据以基于管理需求,转化为直…

PAT B1018.锤子剪刀布

题目描述 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图3-1所示。 现给出两人的交锋记录,请统计双方的胜、平、负次数,并给出双方分别出什么手势的胜算最大。输入格式 第一行给出正整数N(≤10),即双方交锋的次数。随后N行,每行给…

探索Web Components

title: 探索Web Components date: 2024/6/16 updated: 2024/6/16 author: cmdragon excerpt: 这篇文章介绍了Web Components技术,它允许开发者创建可复用、封装良好的自定义HTML元素,并直接在浏览器中运行,无需依赖外部库。通过组合HTML模…

Top10在线音频剪辑软件,你了解几款?(免费分享)

多年来,随着音乐制作人和音频工程师的需求不断增长,音频剪辑软件领域经历了巨大的发展。最新的音频剪辑软件提供了从基本录制到最终发布所需的一切功能。其中一些软件专为播客设计,一些软件是免费的,并且一些软件提供了出色的音效…

python读取excel中的图片超链接,批量下载到本地

1、代码 import xlrd import requestsread_path C:\\Users\\asus\\Desktop\\大法\\公务员\\国考\\行测\\1-推理判断\\URLs.xlsx bk xlrd.open_workbook(read_path) shxrange range(bk.nsheets) sh bk.sheet_by_name("Sheet2") nrows sh.nrows ncols sh.ncols …

【自撰写】【国际象棋入门】第6课 常见术语分析(一)吃双和抽将

第6课 常见术语分析(一)吃双和抽将 本次课中,我们介绍几种最为常见和常用的(单步棋形成)的局面、术语并对其进行简单的分析。一般说来,这些局面都会给予一方以“立竿见影”的优势,或者引向之后…

“鸿蒙开发之图片下载”--案例问题整理

鸿蒙开发之图片下载 关于以上连接中案例demo使用问题整理如下图 而且在写这个案例的时候记得添加权限 "requestPermissions":[{"name" : "ohos.permission.INTERNET"}]

Java多线程设计模式之不可变对象(Immutable Object)模式

简介 多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁。而锁本身又会带来一些问题和开销。Immutable Object模式使得我们可以在不加锁的情况下,既保证共享变量访问的线程安全,又能避免引入锁可能带…

20240619在飞凌OK3588-C的Linux R4系统下查找MIPI YUV摄像头的csi size err

20240619在飞凌OK3588-C的Linux R4系统下查找MIPI YUV摄像头的csi size err 2024/6/19 14:00 缘起,公司使用LVDS OUT的机芯,4LANE的LVDS输出。1920x108030分辨率(1080p/30) 通过FPGA转换为2LANE的MIPI OUT之后进RK3588/OK3588-C。…

sqlite3指令操作-linux

1.查看当前数据库位置 2.查看当前数据库文件下有哪些表 3.显示 某表创建时的SQL语句 4.打开、关闭显示列标题; 5.列对齐显示 6.列以‘,’分隔显示 .separator 7.查询表信息 8.插入消息 9.删除某一行内容 10.修改某行某列内容 11.修改表名字 alter tab…

【Redis】Redis内存使用优化方法

目录 1. 数据结构选择和优化 2. 内存优化策略 配置文件优化 内存碎片整理 3. 过期策略和持久化配置 4. 连接和客户端优化 5. 监控和调优 6. 硬件和部署优化 7. 使用虚拟内存 8. Redis Cluster和分片 9. 内存碎片整理与优化 10. 使用内置命令和功能 11. 操作系统和…

浅谈golang字符编码

1、 Golang 字符编码 Golang 的代码是由 Unicode 字符组成的,并由 Unicode 编码规范中的 UTF-8 编码格式进行编码并存储。 Unicode 是编码字符集,囊括了当今世界使用的全部语言和符号的字符。有三种编码形式:UTF-8,UTF-16&#…

2024年项目进度控制软件大比拼:找出适合您团队的最佳工具

本文整理了9大热门项目进度控制软件:PingCode、Worktile、Monday.com、Asana、Trello、Jira、ClickUp、Wrike、Zoho Projects。并且进行详细介绍对比。 在项目管理工具的选择上,不同规模的团队有着各自的需求和偏好。例如,小型团队倾向于选择…

新手搭建Magic-API

项目场景: 我本是一个前端和GIS开发工程师,但新单位并没有配置完整的开发团队,确切说目前只有我一个人做开发,那么肯定避免不了要研究下后端。最近有一个小程序要开发,管理平台我直接用的fastAdminthinkphp写完了页面…

终极版本的Typora上传到博客园和csdn

激活插件 下载网址是这个: https://codeload.github.com/obgnail/typora_plugin/zip/refs/tags/1.9.4 解压之后这样的: 解压之后将plugin,复制到自己的安装目录下的resources 点击安装即可: 更改配置文件 "dependencies&q…

XL5300 dTOF测距模块 加镜头后可达7.6米测距距离 ±4%测距精度

XL5300 直接飞行时间(dToF)传感器是一个整体方案dTOF 模组,应用设计简单。片内集成了单光子雪崩二极管(SPAD)接收阵列以及VCSEL激光发射器。利用自主研发的 SPAD 和独特的ToF 采集与处理技术,XL5300模块可实…

选择游戏服务器后期的安全维护有哪些?

随着科技的快速发展,网络行业也逐渐兴起,其中游戏行业也步入了人们的日常生活当中,网络游戏对于服务器的要求也是比较高的,大型的网络游戏需要有着高防御力的服务器,并根据企业自身的业务需求来选择服务器的配置&#…

软件产品进行确认测试有什么好处?第三方软件测试机构分享

软件确认测试是一项旨在验证软件是否符合预期需求和规格的测试活动。通过确认测试,您可以确保软件的功能、性能和用户界面的符合程度,从而降低软件发布后出现问题的风险。 一、软件产品进行确认测试的好处   1、减少软件发布后修复问题的成本。通过及…

python 版本管理工具 pyenv-win 安装

一、下载 pyenv pyenv-win 使用 powershell 下载 Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./ins…