详解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.F1 F1键
Keys.SPACE 空格
Keys.TAB Tab键
Keys.ESCAPE ESC键
Keys.ALT Alt键
Keys.SHIFT Shift键
Keys.ARROW_DOWN 向下箭头
Keys.ARROW_LEFT 向左箭头
Keys.ARROW_RIGHT 向右箭头
Keys.ARROW_UP 向上箭头
Keys.BACK_SPACE Backspace建

组合键使用

        //组合键
        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("//*[@id=\"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("//*[@id=\"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("//*[@id=\"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("//*[@id=\"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);
    }

到此这篇关于详解Java Selenium中的键盘控制操作的文章就介绍到这了,更多相关Java Selenium键盘内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java利用Selenium操作浏览器的示例详解

    目录 简介 设置元素等待 显式等待 隐式等待 强制等待 总结 简介 本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素等待,等待元素加载完,再操作. 设置元素等待 很多页面都使用 ajax 技术,页面的元素不是同时被加载出来的,为了防止定位这些尚在加载的元素报错,可以设置元素等来增加脚本的稳定性.webdriver 中的等待分为 显式等待 和 隐式等待. 显式等待 显式等待:设置一个超时时间,每个一段时间就去检

  • Java selenium截图操作的实现

    方法一:Selenium中截图类TakeScreenshout,这个类主要是获取浏览器窗体内的内容,不包括浏览器的菜单和桌面的任务栏区域,我们用百度首页来截图,看看截图效果. FileUtils.copyFile(srcFile, new File("屏幕截图", time + ".png"));"屏幕截图"是我们自己创建的文件夹用来存放截图文件,此文件夹在project(工程)的更目录 : 当然也是可以设置保存到其他目录下:FileUtils.

  • java selenium 操作浏览器实例

    本篇文章介绍selenium 操作浏览器 阅读目录 浏览器最大化 前进,后退, 刷新 截图操作 模拟鼠标操作 杀掉Windows浏览器进程 浏览器最大化 前进,后退, 刷新 public static void testBrowser(WebDriver driver) throws Exception { driver.get("http://www.cnblogs.com/tankxiao"); Thread.sleep(5000); // 浏览器最大化 driver.manage

  • 详解Java Selenium中的鼠标控制操作

    目录 简介 鼠标控制 单击左键 单击右键 双击左键 按压左键 鼠标箭头移动 鼠标释放 鼠标拖拽 鼠标等待 简介 本文主要讲解如何用java Selenium 控制鼠标在浏览器上的操作方法.主要列举的代码示例,无图显示.可以自己上代码执行操作看效果. 鼠标控制 单击左键 模拟完成单击鼠标左键的操作,一般点击进入子页面等会用到. 第一种通过WebElement对象的click()方法实现单击左键 import org.openqa.selenium.By; import org.openqa.sel

  • Java selenium上传文件的实现

    目录 下载和安装AutoIt 1.打开AutoIt的官网下载 下载和安装AutoIt 文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,如AutoIt.sikuli. AutoIt , 这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)的自动化操作,利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务; 1.打开AutoIt的官网下载 AutoIt下载链接:https://www.autoit

  • 详解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.sel

  • 详解java代码中init method和destroy method的三种使用方式

    在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. 周末对这两个方法进行了一点学习和整理,倒也不是专门为了这两个方法,而是在巩固spring相关知识的时候提到了,然后感觉自己并不是很熟悉这个,便好好的了解一下. 根据特意的去了解后,发现实际上可以有三种方式来实现init method和destroy method. 要用这两个方法,自然先要知道这两

  • 详解JAVA Spring 中的事件机制

    说到事件机制,可能脑海中最先浮现的就是日常使用的各种 listener,listener去监听事件源,如果被监听的事件有变化就会通知listener,从而针对变化做相应的动作.这些listener是怎么实现的呢?说listener之前,我们先从设计模式开始讲起. 观察者模式 观察者模式一般包含以下几个对象: Subject:被观察的对象.它提供一系列方法来增加和删除观察者对象,同时它定义了通知方法notify().目标类可以是接口,也可以是抽象类或具体类. ConcreteSubject:具体的

  • 详解Java分布式系统中一致性哈希算法

    业务场景 近年来B2C.O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来.分布式系统相对于单系统,解决了流量大.系统高可用和高容错等问题.功能强大也意味着实现起来需要更多技术的支持.例如系统访问层的负载均衡,缓存层的多实例主从复制备份,数据层的分库分表等. 我们以负载均衡为例,常见的负载均衡方法有很多,但是它们的优缺点也都很明显: 随机访问策略.系统随机访问,缺点:可能造成服务器负载压力不均衡,俗话讲就是撑的撑死,饿的饿死. 轮询策略.请求均匀分配,如果服务器有性能差异,则无法实现

  • 详解Java分布式系统中session一致性问题

    业务场景 在单机系统中,用户登陆之后,服务端会保存用户的会话信息,只要用户不退出重新登陆,在一段时间内用户可以一直访问该网站,无需重复登陆.用户的信息存在服务端的 session 中,session中可以存放服务端需要的一些用户信息,例如用户ID,所属公司companyId,所属部门deptId等等. 但是随着业务的发展,技术架构需要调整,原来的单机系统逐渐被更换,架构由单机扩展到分布式,甚至当下流行的微服务.虽然在用户端看来系统仍然是一个整体,但在技术端来说业务则被拆分成多个模块,各个模块之间

  • 详解Java集合中的基本数据结构

    集合中三大数据结构 数组 内存地址连续 可以通过下标的成员访问,下标访问的性能高 增删操作有较大的性能消耗(需要动态扩容) 链表(双向链表) 灵活的空间要求,存储空间不要求连续 不支持下标访问,支持顺序遍历搜索 针对增删操作找到对应的节点改变链表的头尾指针指向即可,无需移动元数据存储位置 树(Java中二叉树特性) 某节点的左子树节点仅包含小于该节点的值 某节点的右子树节点仅包含大于该节点的值 节点必须是二叉树 顺序排列 存在问题:树可以认为是介于数组和链表二者之间的一种数据结构,拥有较快的查询

  • 详解Java设计模式中的装饰模式

    目录 一.装饰模式的定义和特点 二.装饰模式的结构 三.咖啡点单案例演示 四.总结 一.装饰模式的定义和特点 在软件开发过程中,有时想用一些现存的组件.这些组件可能只是完成了一些核心功能.但在不改变其结构的情况下,可以动态地扩展其功能.所有这些都可以釆用装饰器模式来实现. 就像我们做菜,需要用到调料,菜,刀,火等一系列抽象的组件来最终完成一道菜. 装饰模式的定义: 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式.就增加功能来说,装饰模式

  • 详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法

    目录 前言 一.缓存穿透 二.缓存击穿 三.雪崩现象 总结 前言 本文主要阐述redis中的三种现象 1.缓存穿透 2.缓存击穿 3.雪崩现象 本文主要说明本人对三种情况的理解,如果需要知道redis基础请查看其他博客,加油! 一.缓存穿透 理解:何为缓存穿透,先要了解穿透,这样有助于区分穿透和击穿,穿透就类似于伤害一点一点的累计,最终打到穿透的目的,类似于射手,一下一下普通攻击,最终杀死对方,先上图 先来描述一下缓存穿透的过程: 1.由于我们取数据的原则是先查询redis上,如果redis上有

  • 详解Java泛型中类型擦除问题的解决方法

    以前就了解过Java泛型的实现是不完整的,最近在做一些代码重构的时候遇到一些Java泛型类型擦除的问题,简单的来说,Java泛型中所指定的类型在编译时会将其去除,因此List 和 List 在编译成字节码的时候实际上是一样的.因此java泛型只能做到编译期检查的功能,运行期间就不能保证类型安全.我最近遇到的一个问题如下: 假设有两个bean类 /** Test. */ @Data @NoArgsConstructor @AllArgsConstructor public static class

随机推荐