Selenium 中的 Action 类

在本教程中,我们将学习如何在 Selenium Webdriver 中处理键盘和鼠标事件

Selenium 中的 Action 类

Selenium 中的 Action 类是 Selenium 提供的一个内置功能,用于处理键盘和鼠标事件。它包括各种操作,例如通过控制键进行多次点击、拖放事件等等。这些来自 Action 类的操作是使用 Selenium Webdriver 中的高级用户交互 API 执行的。

处理键盘和鼠标事件

特殊键盘和鼠标事件的处理是通过 高级用户交互 API 完成的。它包含执行这些事件所需的 ActionsAction 类。以下是 Actions 类提供的最常用的键盘和鼠标事件。

方法 描述
clickAndHold() 在当前鼠标位置点击(不释放)。
contextClick() 在当前鼠标位置执行上下文点击。(鼠标右键操作)
doubleClick() 在当前鼠标位置执行双击。
dragAndDrop(source, target) 在源元素位置执行点击并按住,移动到目标元素位置,然后释放鼠标。

参数

source - 模拟按钮按下的元素。

target - 移动到并释放鼠标的元素。

dragAndDropBy(source, x-offset, y-offset) 在源元素位置执行点击并按住,按给定偏移量移动,然后释放鼠标。

参数:

source - 模拟按钮按下的元素。

xOffset - 水平移动偏移量。

yOffset - 垂直移动偏移量。

keyDown(modifier_key) 执行修饰键按下。不释放修饰键 – 后续交互可能会假定它一直处于按下状态。

参数:

modifier_key – 任意修饰键(Keys.ALT、Keys.SHIFT 或 Keys.CONTROL)

keyUp(modifier _key) 执行按键释放。

参数:

modifier_key – 任意修饰键(Keys.ALT、Keys.SHIFT 或 Keys.CONTROL)

moveByOffset(x-offset, y-offset) 将鼠标从当前位置(或 0,0)按给定偏移量移动。

参数:

x-offset - 水平偏移量。负值表示鼠标向左移动。

y-offset - 垂直偏移量。负值表示鼠标向下移动。

moveToElement(toElement) 将鼠标移动到元素的中间。

参数:

toElement - 移动到的元素。

release() 在当前鼠标位置释放按下的鼠标左键
sendKeys(onElement, charsequence) 向元素发送一系列击键。

参数:

onElement - 将接收击键的元素,通常是文本字段

charsequence - 表示要发送的击键序列的任何字符串值

在以下示例中,我们将使用 moveToElement() 方法将鼠标悬停在 Mercury Tours 表格的某一行上。请参阅下面的示例。

Handling Keyboard & Mouse Events

上面显示的单元格是 <TR> 元素的一部分。如果未悬停,其颜色为 #FFC455(橙色)。悬停后,单元格的颜色变为透明。它变得与整个橙色表格的蓝色背景相同。

步骤 1) 导入 ActionsAction 类。

Handling Keyboard & Mouse Events

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

Handling Keyboard & Mouse Events

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

Handling Keyboard & Mouse Events

在此示例中,我们将使用 moveToElement() 方法,因为我们只是将鼠标悬停在“Home”链接上。build() 方法始终是最终使用的方法,以便将所有列出的操作编译为单个步骤。

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

Handling Keyboard & Mouse Events

下面是完整的 WebDriver 代码,用于检查 <TR> 元素在鼠标悬停前后背景颜色。

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 Class in Selenium

构建一系列多重操作

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

Building A Series Of Multiple Actions

public static void main(String[] args) {
String baseUrl = "https://#/"; 
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() ;

}

Building A Series Of Multiple Actions

摘要

  • 特殊键盘和鼠标事件的处理是通过 AdvancedUserInteractions API 完成的。
  • 常用的键盘和鼠标事件有 doubleClick()、keyUp、dragAndDropBy、contextClick 和 sendKeys。