曲鸟全栈UI自动化教学(五):Selenium的键盘鼠标事件详解

简介: 曲鸟全栈UI自动化教学(五):Selenium的键盘鼠标事件详解

一、前言


在之前的教学中对于页面的操作只涉及到了两个:点击、输入;其实Selenium的键盘鼠标操作还有很多,现在就为你一一讲解。


二、键盘事件


1. 输入指定内容【send_keys】

1.1 我们可以使用send_keys来输入我们想要输入的内容

例如打开百度,搜索框输入:曲鸟 csdn

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()  # 启动chrome浏览器
driver.get('https://www.baidu.com/')  # 打开百度网址
# 在输入框输入:曲鸟 csdn
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('曲鸟 csdn')

1.2 也可以指定按键输入

例如我们打开百度输入:csdn 曲鸟,并粘贴复制它三次


import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()  # 启动chrome浏览器
driver.get('https://www.baidu.com/')  # 打开百度网址
# 在输入框输入:曲鸟 csdn
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('曲鸟 csdn')
# 按下crtl+A 全选
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'a')
# 按下crtl+C 复制
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'c')
# 按下crtl+V 粘贴
for i in range(3):
    time.sleep(0.5)
    driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'v')


执行效果


38ee5f9c96304314939972d4ee8ee808.gif


1.3 组合按键规则


send_keys支持按键的组合传递,例如上述的粘贴【Ctrl+V】操作,代码实现为:


driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'v')


另外,通过+号做连接组合按键也是可行的


driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL+'c')


如果想同时按下三个或更多按键键,则在括号中使用,+号追加参数即可,例如在输入框同时输入abc:


driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('a', 'b','c')


另外,我们可以通过【Ctrl+鼠标左键】代码中的Keys,查看支持哪些按键及调用代码


09552d7e6d564067b70e8c42c304132b.png

2. 模拟按下/弹起【key_down/key_up】


Webdriver还提供了模拟键盘按下/弹起的操作,例如上述的复制操作可以改写为下面的代码

driver.find_element(By.XPATH, '//*[@id="kw"]')
webdriver.ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform()


实际该方法不常用,使用第一种方法实现来说更简单。


3. 清空输入【clear】


clear方法可以清楚输入框中的内容,例如下面的代码,会先打开百度,搜索框输入:曲鸟 csdn,然后调用clear方法进行清空

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')  # 打开百度网址
# 在输入框输入:曲鸟 csdn
driver = driver.find_element(By.XPATH, '//*[@id="kw"]')
driver.send_keys('曲鸟 csdn')
driver.clear()

三、鼠标事件


1. 点击【click】


通过click方法能够对页面中可点击元素进行点击操作,例如下面的代码会对百度的【百度一下】按钮进行点击

from selenium import webdriver
from selenium.webdriver.common.by import By
driver= webdriver.Chrome()
driver.get('https://www.baidu.com/')  # 打开百度网址
# 点击百度一下
driver.find_element(By.XPATH,'//*[@id="su"]').click()


2. 单击并按住【click_and_hold】


下面的代码会将button这个元素单击并按住

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')  # 打开百度网址
button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]')
webdriver.ActionChains(driver).click_and_hold(button).perform()


3. 右键单击【context_click】


下面的代码会将button这个元素单击并按住


from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')  # 打开百度网址
button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]').click()
webdriver.ActionChains(driver).context_click(button).perform()


4. 移动到元素(悬浮)【move_to_element】


下面的代码会将鼠标移动到button这个元素上


from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')  # 打开百度网址
button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]')
webdriver.ActionChains(driver).move_to_element(button).perform()


5. 偏移移动【move_by_offset

此方法将鼠标从其当前位置(或 0,0)移动给定的偏移量。如果坐标在视图窗口之外,那么鼠标将在浏览器窗口之外结束。

下面的代码会将以button这个元素为起点,将鼠标移动长为100,高为100的距离

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')  # 打开百度网址
button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]')
xOffset = 100
yOffset = 100
webdriver.ActionChains(driver).move_by_offset(xOffset, yOffset).perform()

6. 拖拽【drag_and_drop】


此方法首先在源元素上执行单击并按住,移动到目标元素的位置,然后释放鼠标。

下面的代码会单击按住sourceEle元素,然后拖拽到targetEle上,然后释放鼠标


from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://crossbrowsertesting.github.io/drag-and-drop")
sourceEle = driver.find_element(By.ID, "draggable")
targetEle = driver.find_element(By.ID, "droppable")
webdriver.ActionChains(driver).drag_and_drop(sourceEle,targetEle).perform()


7. 偏移拖拽【drag_and_drop_by_offset】


此方法首先在源元素上执行单击并按住,移动到给定的偏移量,然后释放鼠标。

下面的代码会单击按住sourceEle元素,将鼠标移动长为100,高为100的距离,然后释放鼠标

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://crossbrowsertesting.github.io/drag-and-drop")
sourceEle = driver.find_element(By.ID, "draggable")
XOffset = 100
YOffset = 100
webdriver.ActionChains(driver).drag_and_drop_by_offset(sourceEle, XOffset, YOffset).perform()

8. 释放鼠标【release】


此动作释放按下的鼠标左键。如果传递了 WebElement,它将在给定的 WebElement 上释放按下的鼠标左键


from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://crossbrowsertesting.github.io/drag-and-drop")
sourceEle = driver.find_element(By.ID, "draggable")
targetEle  = driver.find_element(By.ID, "droppable")
webdriver.ActionChains(driver).click_and_hold(sourceEle).move_to_element(targetEle).perform()
webdriver.ActionChains(driver).release().perform()


目录
相关文章
|
19天前
|
人工智能 自然语言处理 API
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
UI-TARS 是字节跳动推出的新一代原生图形用户界面(GUI)代理模型,支持跨平台自动化交互,具备强大的感知、推理、行动和记忆能力,能够通过自然语言指令完成复杂任务。
310 16
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
|
2月前
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
293 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
2月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
140 31
Selenium IDE:Web自动化测试的得力助手
|
2月前
「Mac畅玩鸿蒙与硬件42」UI互动应用篇19 - 数字键盘应用
本篇将带你实现一个数字键盘应用,支持用户通过点击数字键输入数字并实时更新显示内容。我们将展示如何使用按钮组件和状态管理来实现一个简洁且实用的数字键盘。
91 17
「Mac畅玩鸿蒙与硬件42」UI互动应用篇19 - 数字键盘应用
|
2月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
256 17
Selenium:强大的 Web 自动化测试工具
|
6月前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
72 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
182 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
4月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
902 5
|
3月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
80 0
|
5月前
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
620 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取

热门文章

最新文章