动作类 Selenium
⚡ 智能摘要
动作类 Selenium 通过高级用户交互 API 处理高级键盘和鼠标事件,例如悬停、拖放、右键单击和组合键。本教程将解释 Actions 和 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。
这里我们使用 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();
}





