动作类 Selenium – 鼠标点击和键盘事件

在本教程中,我们将学习处理键盘和鼠标事件 Selenium 网络驱动程序

动作类 Selenium

动作类 Selenium 是 selenium 提供的用于处理键盘和鼠标事件的内置功能。它包括各种操作,例如通过控制键单击多个事件、拖放事件等等。这些来自操作类的操作是使用高级用户交互 API 执行的 Selenium 网络驱动程序。

处理键盘和鼠标事件

处理特殊的键盘和鼠标事件是使用 高级用户交互 API。 它包含 行动操作 执行这些事件时需要用到的类。下面是 Actions 类提供的最常用的键盘和鼠标事件。

付款方式 描述
点击并保持() 单击(不释放)当前鼠标位置。
contextClick() 在当前鼠标位置执行上下文单击。(右键单击鼠标操作)
双击() 在当前鼠标位置执行双击。
dragAndDrop(源,目标) 在源元素的位置单击并按住,移动到目标元素的位置,然后释放鼠标。

参数:

源元素模拟按钮按下的情况。

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

dragAndDropBy(源,x 偏移,y 偏移) 在源元素的位置单击并按住,按给定的偏移量移动,然后释放鼠标。

参数:

源元素模拟按钮按下的情况。

xOffset-水平移动偏移。

yOffset-垂直移动偏移。

keyDown(修饰键) 按下修饰键。不释放修饰键 – 后续交互可能假定修饰键保持按下状态。

参数:

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

keyUp(修饰键 _key) 执行按键释放。

参数:

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

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

参数:

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

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

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

参数:

toElement- 要移动到的元素。

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

参数:

onElement – 接收按键的元素,通常是文本字段

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

在下面的例子中,我们将使用 moveToElement() 方法将鼠标悬停在一个 Mercury 旅游表的行。请参阅下面的示例。

处理键盘和鼠标事件

上面显示的单元格是元素。非悬停时,其颜色为#FFC455(橙色)。悬停后,单元格颜色变为透明。它变成与整个橙色表格的蓝色背景相同的颜色。

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

处理键盘和鼠标事件

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

处理键盘和鼠标事件

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

处理键盘和鼠标事件

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

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

处理键盘和鼠标事件

下面是检查背景颜色的整个 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 = "http://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();
        }
}

下面的输出清楚地表明鼠标悬停后背景颜色变得透明。

动作类 Selenium

构建一系列多重动作

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

构建一系列多重动作

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

}

构建一系列多重动作

总结

  • 使用 AdvancedUserInteractions API 来处理特殊的键盘和鼠标事件。
  • 常用的关键字和鼠标事件是 doubleClick()、keyUp、dragAndDropBy、contextClick 和 sendKeys。