详解Java Selenium中的键盘控制操作

简介

本文主要简介如何使用java代码利用Selenium 控制浏览器中需要用到的键盘操作。

键盘控制

webdriver 中 Keys 类几乎提供了键盘上的所有按键方法,我们可以使用 send_keys + Keys 实现输出键盘上的组合按键如 “Ctrl + C”、“Ctrl + V” 等。

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
 
/**
 * @author Lenovo
 */
public class SeleniumDemo {
    private final static String webDriver = "webdriver.chrome.driver";
    private final static String webDriverPath ="E:\\chromedriver\\chromedriver.exe";
 
    public static void main(String[] args) throws InterruptedException {
        System.setProperty(webDriver, webDriverPath);
        WebDriver driver= new ChromeDriver();
        //有道翻译页面
        driver.get("https://fanyi.youdao.com/index.html#/");
        WebElement element=driver.findElement(By.id("js_fanyi_input"));
        //输入账户名
        element.sendKeys("admin");
        // 模拟回车键进行跳转(输入内容后)
        element.sendKeys(Keys.ENTER);
        //Ctrl + A 全选输入框中内容
        element.sendKeys(Keys.CONTROL, "A");
        //Ctrl + C 复制输入框中内容
        element.sendKeys(Keys.CONTROL, "C");
        //Ctrl + V 粘贴输入框中内容(第一粘贴会把原来的内容替换)
        element.sendKeys(Keys.CONTROL, "V");
        //Ctrl + V 粘贴输入框中内容
        element.sendKeys(Keys.CONTROL, "V");
        //Ctrl + V 粘贴输入框中内容
        element.sendKeys(Keys.CONTROL, "V");
    }
}

其他常见键盘操作:

操作描述
Keys.F1F1键
Keys.SPACE空格
Keys.TABTab键
Keys.ESCAPEESC键
Keys.ALTAlt键
Keys.SHIFTShift键
Keys.ARROW_DOWN向下箭头
Keys.ARROW_LEFT向左箭头
Keys.ARROW_RIGHT向右箭头
Keys.ARROW_UP向上箭头
Keys.BACK_SPACEBackspace建

组合键使用

        //组合键
        element.sendKeys(Keys.CONTROL,Keys.SHIFT, "A");

高频使用

//输入文本
element.sendKeys("洛阳泰山");

补充知识

键盘操作除了使用Selenium 控制键盘外还可以使用 java robot (java.awt包下)的控制键盘结合使用。

使用示例

通过 Robot 类实现发送键盘组合键

    /* 发送键盘组合键,模拟"全选 Ctrl+A ->复制 Ctrl+C ->粘贴 Ctrl+V"快捷键功能
     *         第 2 种方法: 通过 Robot 类实现
     * */
    @Parameters("baseUrl1")
    @Test
    public void RobotCtrlACV(String baseUrl1) throws InterruptedException, AWTException {
        driver.get(baseUrl1 + "/");
        WebElement inputBox = driver.findElement(By.xpath("//*[@query\"]"));
        inputBox.clear();
        inputBox.sendKeys("搜狗");

        Thread.sleep(2000);
        // 定义一个 Robot 对象
        Robot robot = new Robot();
        // 模拟 全选 Ctrl+A
        robot.keyPress(KeyEvent.VK_CONTROL);  // 按下 Ctrl 键
        robot.keyPress(KeyEvent.VK_A);  // 按下字母键,这里大小写均可
        robot.keyRelease(KeyEvent.VK_A);  // 释放字母键,这里大小写均可
        robot.keyRelease(KeyEvent.VK_CONTROL);  // 释放 Ctrl 键
        // 模拟 复制 Ctrl+C
        robot.keyPress(KeyEvent.VK_CONTROL);  // 按下 Ctrl 键
        robot.keyPress(KeyEvent.VK_C);  // 按下字母键,这里大小写均可
        robot.keyRelease(KeyEvent.VK_C);  // 释放字母键,这里大小写均可
        robot.keyRelease(KeyEvent.VK_CONTROL);  // 释放 Ctrl 键

        Thread.sleep(2000);

        driver.navigate().to("http://www.baidu.com" + "/");
        inputBox = driver.findElement(By.xpath("//*[@kw\"]"));
        inputBox.clear();

        // 模拟 粘贴 Ctrl+V
        robot.keyPress(KeyEvent.VK_CONTROL);  // 按下 Ctrl 键
        robot.keyPress(KeyEvent.VK_V);  // 按下字母键,这里大小写均可
        robot.keyRelease(KeyEvent.VK_V);  // 释放字母键,这里大小写均可
        robot.keyRelease(KeyEvent.VK_CONTROL);  // 释放 Ctrl 键

        Thread.sleep(2000);
    }

当然也可以通过 Actions 类实现

  /* 发送键盘组合键,模拟"全选 Ctrl+A ->复制 Ctrl+C ->粘贴 Ctrl+V"快捷键功能
    *         第 1 种方法: 通过 Actions 类实现
    * */
    @Parameters("baseUrl1")
    @Test
    public void ActionsCtrlACV(String baseUrl1) throws InterruptedException, AWTException {
        driver.get(baseUrl1 + "/");
        WebElement inputBox = driver.findElement(By.xpath("//*[@query\"]"));
        inputBox.clear();
        inputBox.sendKeys("搜狗");

        Thread.sleep(2000);
        // 定义一个 Actions 对象
        Actions action = new Actions(driver);
        // 模拟 全选 Ctrl+A
        action.keyDown(Keys.CONTROL);  // 按下 Ctrl 键
        action.sendKeys(Keys.chord("A"));  // 按下字母键,这里大小写均可
        action.keyUp(Keys.CONTROL);  // 释放 Ctrl 键
        // 模拟 复制 Ctrl+C
        action.keyDown(Keys.CONTROL);  // 按下 Ctrl 键
        action.sendKeys(Keys.chord("c"));  // 按下字母键,这里大小写均可
        action.keyUp(Keys.CONTROL);  // 释放 Ctrl 键
        // 这一步,必不可少,作用是使得以上组合键生效
        action.build().perform();

        Thread.sleep(2000);

        driver.navigate().to("http://www.baidu.com" + "/");
        inputBox = driver.findElement(By.xpath("//*[@kw\"]"));
        inputBox.clear();

        // 模拟 粘贴 Ctrl+V
        action.keyDown(Keys.CONTROL);  // 按下 Ctrl 键
        action.sendKeys(Keys.chord("v"));  // 按下字母键,这里大小写均可
        action.keyUp(Keys.CONTROL);  // 释放 Ctrl 键
        // 这一步,必不可少,作用是使得以上组合键生效
        action.build().perform();

        Thread.sleep(2000);
    }

原文地址:https://blog.csdn.net/weixin_40986713/article/details/128561525