Selenium 中的 Action 类
在本教程中,我们将学习如何在 Selenium Webdriver 中处理键盘和鼠标事件
Selenium 中的 Action 类
Selenium 中的 Action 类是 Selenium 提供的一个内置功能,用于处理键盘和鼠标事件。它包括各种操作,例如通过控制键进行多次点击、拖放事件等等。这些来自 Action 类的操作是使用 Selenium Webdriver 中的高级用户交互 API 执行的。
处理键盘和鼠标事件
特殊键盘和鼠标事件的处理是通过 高级用户交互 API 完成的。它包含执行这些事件所需的 Actions 和 Action 类。以下是 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 表格的某一行上。请参阅下面的示例。
上面显示的单元格是 <TR> 元素的一部分。如果未悬停,其颜色为 #FFC455(橙色)。悬停后,单元格的颜色变为透明。它变得与整个橙色表格的蓝色背景相同。
步骤 1) 导入 Actions 和 Action 类。
步骤 2) 实例化一个新的 Actions 对象。
步骤 3) 使用步骤 2 中的 Actions 对象实例化一个 Action。
在此示例中,我们将使用 moveToElement() 方法,因为我们只是将鼠标悬停在“Home”链接上。build() 方法始终是最终使用的方法,以便将所有列出的操作编译为单个步骤。
步骤 4) 执行我们在步骤 3 中设计的 Action 对象时,使用 perform() 方法。
下面是完整的 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 和 Actions 类构建一系列操作。请记住使用 build() 方法结束系列。请考虑下面的示例代码。
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() ; }
摘要
- 特殊键盘和鼠标事件的处理是通过 AdvancedUserInteractions API 完成的。
- 常用的键盘和鼠标事件有 doubleClick()、keyUp、dragAndDropBy、contextClick 和 sendKeys。