动作类 Selenium

⚡ 智能摘要

动作类 Selenium 通过高级用户交互 API 处理高级键盘和鼠标事件,例如悬停、拖放、右键单击和组合键。本教程将解释 Actions 和 Action 类、关键方法,以及如何将多个交互链接成一个序列。

  • 🖱️ 核心宗旨: Actions 类可以自动执行基本 click() 无法实现的复合鼠标和键盘事件。
  • ???? 两类: Actions 构建交互;Action 存储要执行的编译序列。
  • 🧱 先构建后执行: 链式方法,以 build() 结束,并以 perform() 运行。
  • 📋 关键方法: moveToElement()、dragAndDrop()、keyDown()/keyUp()、contextClick() 和 sendKeys()。
  • 🤖 人工智能赋能: AI 助手在交互测试期间生成 Action 类代码和自我修复定位器。

鼠标悬停输出

动作类 Selenium

动作类 Selenium 是用于处理键盘和鼠标事件的内置功能。它支持诸如按住 Control 键进行多次点击、拖放等操作。这些操作是通过高级用户交互 API 执行的。 Selenium WebDriver。

处理键盘和鼠标事件

处理特殊的键盘和鼠标事件是通过以下方式完成的: 高级用户交互 API。 它包含 行动操作 执行这些事件所需的类。下面列出了 Actions 类提供的最常用的键盘和鼠标事件。

付款方式 描述
点击并保持() 单击(不释放)当前鼠标位置。
contextClick() 在当前鼠标位置执行上下文单击(右键单击)。
双击() 在当前鼠标位置执行双击。
dragAndDrop(源,目标) 单击并按住源元素,移动到目标元素,然后松开鼠标。参数:源元素(要按压的元素),目标元素(要松开的元素)。
dragAndDropBy(源,x 偏移,y 偏移) 单击并按住源元素,使其移动指定的偏移量,然后松开。参数:源元素、xOffset(水平)、yOffset(垂直)。
keyDown(修饰键) 按下修饰键而不松开,因此后续交互会假定该键保持按下状态。参数:修饰键(Keys.ALT、Keys.SHIFT 或 Keys.CONTROL)。
keyUp(modifier_key) 释放修饰键。参数:修饰键(Keys.ALT、Keys.SHIFT 或 Keys.CONTROL)。
moveByOffset(x 偏移,y 偏移) 将鼠标从当前位置(或 0,0)移动指定的偏移量。负的 x 值向左移动;负的 y 值向上移动。
moveToElement(到元素) 将鼠标移动到元素中心。参数:要移动到的元素。
释放() 在当前位置释放按下的鼠标左键。
sendKeys(onElement,charsequence) 向元素发送一系列按键。参数:onElement(通常为文本字段),charsequence(要发送的按键)。

在下面的示例中,我们使用 moveToElement() 将鼠标悬停在其中一个上的方法 Mercury 旅游桌行。

处理键盘和鼠标事件

上图所示的单元格是……的一部分元素。鼠标悬停前,其颜色为 #FFC455(橙色)。鼠标悬停后,单元格颜色变为透明,并与周围表格的背景色相匹配。

步骤1) 导入 行动操作 类。

导入操作和操作类

步骤2) 实例化一个新的 Actions 对象。

实例化操作对象

步骤3) 使用步骤 2 中的 Actions 对象实例化一个 Action。

实例化 Action 对象

这里我们使用 moveToElement() 将鼠标悬停在“首页”链接上的方法。 build() 该方法总是最后调用,以便将所有列出的操作合并为一个步骤。

步骤4) 使用 perform() 执行步骤 3 中设计的 Action 对象的方法。

执行该操作

以下是检查背景颜色的完整 WebDriver 代码鼠标悬停前后的元素。

package newproject;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;

public class PG7 {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();

        driver.get(baseUrl);
        WebElement link_Home = driver.findElement(By.linkText("Home"));
        WebElement td_Home = driver.findElement(By.xpath(
            "//html/body/div/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr"));

        Actions builder = new Actions(driver);
        Action mouseOverHome = builder.moveToElement(link_Home).build();

        String bgColor = td_Home.getCssValue("background-color");
        System.out.println("Before hover: " + bgColor);
        mouseOverHome.perform();
        bgColor = td_Home.getCssValue("background-color");
        System.out.println("After hover: " + bgColor);
        driver.close();
    }
}

下面的输出结果显示,鼠标悬停后背景颜色变为透明。

鼠标悬停输出

构建一系列多重动作

您可以使用 Action 和 Actions 类构建一系列操作。请记住以结束操作序列的方式结束该系列操作。 build() 方法。请参考以下示例代码。

构建一系列多重行动

public static void main(String[] args) {
    String baseUrl = "https://www.facebook.com/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    WebElement txtUsername = driver.findElement(By.id("email"));

    Actions builder = new Actions(driver);
    Action seriesOfActions = builder
        .moveToElement(txtUsername)
        .click()
        .keyDown(txtUsername, Keys.SHIFT)
        .sendKeys(txtUsername, "hello")
        .keyUp(txtUsername, Keys.SHIFT)
        .doubleClick(txtUsername)
        .contextClick()
        .build();

    seriesOfActions.perform();
}

一系列动作输出

常见问题

Action 类表示使用 Actions 类构建的键盘和鼠标交互序列。它通过高级用户交互 API 执行。 Selenium WebDriver。

Actions(复数)是用于构建诸如悬停和点击等交互的构建器。Action(单数)是 build() 返回的已编译对象,您可以使用 perform() 运行该对象。

`build()` 函数会将所有链式交互编译成一个复合动作。它总是最后调用,紧接在 `perform()` 函数之前,因此排队的步骤会作为一个序列一起执行。

perform() 函数会针对浏览器执行已构建的 Action。如果没有它,链式交互只会排队,而不会实际发送到页面。

对 Actions 对象使用 moveToElement(element) 方法,然后调用 build() 和 perform() 方法。这会将光标移动到元素的中心,并触发任何悬停行为,例如下拉菜单。

它支持点击并按住、上下文点击、双击、拖放、按位置拖放、按下按键、抬起按键、按偏移量移动、移动到元素、释放和发送按键——涵盖了大多数高级交互。

AI 工具使用自愈定位器,能够根据元素变化自动调整,从而减少悬停和拖放测试中出现的不稳定故障。它们还会推荐稳定的 XPath,并自动添加智能等待。

是的。AI 代码助手可以将“将鼠标悬停在 Home 上,然后单击”之类的简单英语场景转换为包含 build() 和 perform() 的可执行操作链,并建议强大的定位器。

总结一下这篇文章: