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

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

python 复制代码
#!/usr/bin/python3
# coding=utf-8
"""
@author: Jeffky
@file: demo13.py
@time: 2024-6-19 9:23
"""
from selenium import webdriver
from time import sleep

from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By


class 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()方法。

python 复制代码
button = driver.find_element(By.ID, 'myButton')
ActionChains(driver).click(button).perform()

2. 双击操作

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

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

3. 右键点击

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

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

键盘操作

1. 基本键盘输入

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

python 复制代码
inputField = driver.find_element(By.ID, 'searchBox')
inputField.send_keys("Selenium")

2. 键盘组合键

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

python 复制代码
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')  # 粘贴

高级应用

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

python 复制代码
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 提供了多种等待机制,如隐式等待和显式等待,以确保元素在执行操作之前是可交互的。

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

总结

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

相关推荐
天下·第二3 分钟前
使用【docker】简单部署打包构建好的镜像并运行python项目
python·docker·eureka
左手の明天18 分钟前
【Python网络爬虫案例】python爬虫之模拟登录
开发语言·爬虫·python·模拟登录
CHNMSCS44 分钟前
Django项目 - 合并PDF文件
python·django·pdf
Mac分享吧1 小时前
PyCharm2024 for mac Python编辑开发
python·macos·pycharm·编辑器·mac·软件需求
Itmastergo1 小时前
零基础小白学习 Python,应该如何配置 Python 开发环境?(包含Windows、MacOS、Linux)
开发语言·python·学习
c实例2 小时前
python 查找轮廓
人工智能·python·opencv·计算机视觉
熙尛2 小时前
Python处理Excel 的常用操作详解
开发语言·python·excel
爱吃牛肉的大老虎2 小时前
Python基础之正则表达式
python·mysql·正则表达式