Selenium 模拟键盘及鼠标操作

这篇具有很好参考价值的文章主要介绍了Selenium 模拟键盘及鼠标操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在第三章中我们已经初步掌握了 Selenium 中的元素操作,包括了 click() 点击操作、clear() 清除操作以及 sendKeys() 输入操作,但是这三种操作还不能够满足测试用例中的操作;以点击来说,使用鼠标可以实现点击、双击等,而使用键盘也可以输入除了字符串之外的如 CTRL、ENTER、SHIFT 键来实现提交等操作。接下来我们将介绍如何实现这些操作。

知识点
  • clickAndHold(): 点击鼠标左键
  • contextClick(): 点击鼠标右键
  • doubleClick(): 鼠标双击
  • moveToElement(): 鼠标悬停
  • dragAndDrop(): 鼠标拖拽
  • perform(): 执行所有 Actions 中存储的行为
  • sendKeys(): 输入键盘中的按键
  • keysDown(): 按下按键
  • keysUp(): 松开按键

在官网首页当时鼠标悬停在课程标签上时,会显示 “全部课程”、“项目库”...等内容,如果我们想要模拟这种鼠标悬停的操作就需要使用到 moveToElement 方法。

Selenium 模拟键盘及鼠标操作,selenium,计算机外设,测试工具

在 cn.lanqiao.mouse 包下创建 MouseCommandTest 测试类,创建测试方法 testMoveToElement,具体代码如下:

package cn.lanqiao.mouse;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class MouseCommandTest {

    @Test
    public void testMoveToElement() throws Exception {
        // 设置 WebDriver 的路径
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\jingnan\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.lanqiao.cn");

        Actions actions = new Actions(driver);

        WebElement course = driver.findElement(By.partialLinkText("课程"));
        actions.moveToElement(course).perform();

        Thread.sleep(1000);
        driver.quit();

    }
}

在上述代码中需要注意的是在 Actions 调用完鼠标操作方法后一定要调用 perform() 方法,否则这些操作都不会执行,另外鼠标操作针对的是具体的元素,因此需要传入一个 WebElement 对象。

上述代码执行过程如下:

Selenium 模拟键盘及鼠标操作,selenium,计算机外设,测试工具

鼠标拖拽元素操作

使用鼠标对元素进行拖拽到其他元素上也是比较常见的操作,这种操作我们可以通过 clickAndHold(target)、moveToElement(dest) 以及 release() 方法来完成,在 MouseCommandTest 测试类下新建测试方法 testDragElement,具体代码如下:

package cn.lanqiao.mouse;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class MouseCommandTest {

    @Test
    public void testDragElement() throws Exception{
        // 设置 WebDriver 的路径
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\jingnan\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get("https://jqueryui.com/droppable/");

        // 切换 iframe
        driver.switchTo().frame(driver.findElement(By.className("demo-frame")));

        WebElement target = driver.findElement(By.id("draggable"));
        WebElement dest = driver.findElement(By.id("droppable"));

        Actions actions = new Actions(driver);
        // 执行拖拽操作
        actions.clickAndHold(target)
                .moveToElement(dest)
                .release()
                .perform();

        Thread.sleep(5000);
        driver.quit();
    }
}

执行上述代码,执行过程如下:

Selenium 模拟键盘及鼠标操作,selenium,计算机外设,测试工具

根据执行过程可以看出,通过上面三个方法是可以将一个元素移动或者拖拽到另一个元素上的。

鼠标拖拽元素到指定位置

当然有时候我们也可能需要将一个元素拖拽到一个指定的位置,而不是某个元素上面,这就需要使用到 dragAndDropBy 方法了,在 MouseCommandTest 测试类中创建测试方法 testDrageElementToPostion,具体代码如下:

package cn.lanqiao.mouse;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class MouseCommandTest {

    @Test
    public void testDrageElementToPostion() throws Exception{
        // 设置 WebDriver 的路径
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\jingnan\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get("https://jqueryui.com/draggable/");

        driver.switchTo().frame(driver.findElement(By.className("demo-frame")));

        WebElement target = driver.findElement(By.id("draggable"));

        Actions actions = new Actions(driver);

        // 往右拖拽 100
        actions.dragAndDropBy(target, 100, 0).perform();
        Thread.sleep(2000);

        // 往下拖拽 100
        actions.dragAndDropBy(target, 0, 100).perform();
        Thread.sleep(2000);

        Thread.sleep(5000);
        driver.quit();
    }
}

执行上述代码,执行过程如下:

Selenium 模拟键盘及鼠标操作,selenium,计算机外设,测试工具

根据执行过程可以确定,dragAndDropBy 方法可以成功的拖拽元素到指定的位置。

鼠标放大或者缩小元素操作

放大或者缩写的方法为 moveByOffsetmoveByOffset

package cn.lanqiao.mouse;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class MouseCommandTest {

    @Test
    public void testmMoveByOffset() throws Exception {
        // 设置 WebDriver 的路径
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\jingnan\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get("https://jqueryui.com/resizable/");
        // 定位 iframe
        driver.switchTo().frame(driver.findElement(By.className("demo-frame")));
        // 切换到 iframe
        WebElement element = driver.findElement(By.xpath("/html/body/div/div[3]"));

        Thread.sleep(2000);
        Actions actions = new Actions(driver);
        // 进行方法或者缩小操作
        actions.clickAndHold(element)
                .moveByOffset(20, 20)
                .moveByOffset(-20, -20)
                .perform();

        Thread.sleep(5000);
        driver.quit();

    }
}

执行上述代码,执行过程如下:

Selenium 模拟键盘及鼠标操作,selenium,计算机外设,测试工具

关于其他鼠标操作方法,如:

Actions actions = new Action(driver);

// 鼠标右键点击指定元素
action.contextClick(driver.findElement(By.id("kw"))).perform();
// 鼠标双击指定元素
action.doubleClick(driver.findElement(By.id("kw"))).perform();

// 鼠标拖拽操作
action.dragAndDrop(driver.findElement(By.name("source"), driver.findElement(By.name("target")))).perform;

// 释放鼠标
action.release().perform();

 

Keys 类提供了键盘上几乎所有的按键方法,在前面章节中我们了解到 sendKeys 也可以往元素中输入字符串,除此之外我们还可以模拟键盘上的复制、黏贴、剪切和删除等操作。

在 selenium-java 项目中 test 包下创建 cn.lanqiao.keyboard 包,创建 KeyBoardCommandTest 测试类,创建 testKeyboard 测试方法来模拟键盘的常见操作,具体代码如下:

package cn.lanqiao.keyboard;

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;

public class KeyBoardCommandTest {

    @Test
    public void testKeyboard() throws Exception{
        // 设置 WebDriver 的路径
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\jingnan\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");

        WebElement input = driver.findElement(By.id("kw"));
        
        input.sendKeys("蓝桥云客");
        Thread.sleep(2000);

        input.sendKeys(Keys.BACK_SPACE);
        Thread.sleep(2000);

        input.sendKeys(Keys.SPACE);
        input.sendKeys("课");
        Thread.sleep(2000);

        input.sendKeys(Keys.CONTROL, "a");
        Thread.sleep(2000);

        input.sendKeys(Keys.CONTROL, "x");

        Thread.sleep(1000);
        driver.quit();
    }
}

上述代码通过 sendKeys 方法,调用 Keys 的枚举值,实现了删除、全选和剪切操作,上述代码执行过程如下:

操作支持多选的元素

在对支持多选的元素进行选择的操作时,我们常会按住 CONTROL 然后使用鼠标选择我们所需要的选项,接下来我们来模拟这种操作,在 KeyBoardCommandTest 测试类下新增测试方法 testSelectable,同时使用鼠标和键盘来选择多个选项,具体代码如下:

package cn.lanqiao.keyboard;

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;

public class KeyBoardCommandTest {

    @Test
    public void testSelectable() throws Exception{
        // 设置 WebDriver 的路径
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\jingnan\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get("https://jqueryui.com/selectable/");

        driver.switchTo().frame(0);

        List<WebElement> elements = driver.findElements(By.xpath("//ol[@id='selectable']/*"));

        Actions actions = new Actions(driver);

        actions.keyDown(Keys.CONTROL)
                .click(elements.get(0))
                .click(elements.get(2))
                .click(elements.get(4))
                .keyUp(Keys.CONTROL)
                .perform();

        Thread.sleep(5000);
        driver.quit();
    }
}

执行上述代码,执行过程如下:

Selenium 模拟键盘及鼠标操作,selenium,计算机外设,测试工具

根据执行过程可以看到,成功模拟了一边安装 CONTROL 键一边使用鼠标点击选择。

下面中给出了常用的键盘操作类:

操作 方法
全选(CTRL+A) sendKeys(Keys.CONTROL, "a")
复制(CTRL+C) sendKeys(Keys.CONTROL, "c")
剪切(CTRL+X) sendKeys(Keys.CONTROL, "x")
黏贴(CTRL+V) sendKeys(Keys.CONTROL, "v")
回退(ESC) sendKeys(Keys.ESCAPE)
制表(TAB) sendKeys(Keys.TAB)
空格(SPACE) sendKeys(Keys.SPACE)
回退(BACKSPACE) sendKeys(Keys.BACK_SPACE)
刷新(F5) sendKeys(Keys.F5)
删除(DELETE) sendKeys(Keys.DELETE)
数字 1(1) sendKeys(Keys.NUMPAD1)

鼠标和键盘的操作在测试用例中也非常常用,要根据实际情况选择使用键盘和鼠标操作。文章来源地址https://www.toymoban.com/news/detail-852595.html

到了这里,关于Selenium 模拟键盘及鼠标操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium自动化测试-鼠标键盘操作

    前面我们已经学完了8种定位方式和利用Firefox插件协助定位,学会了定位了,自动化就成功了一半。 但是我们好像只是定位,定位后的操作并不多,我们今天要系统的了解下鼠标键盘操作。 回顾下我们之前的简单操作: 1.click() 点击按钮 2.clear() 清除输入框 3.send_keys() 输入字

    2024年02月07日
    浏览(40)
  • selenium 模拟鼠标操作

    前言:我们在做web自动化的时候,有时候页面的元素不需要我们点击,值需要把鼠标移动上去就能展示各种信息,这个时候我们可以通过操作鼠标来实现,接下来我们来讲一下使用selenium做web自动化的时候如何来操作鼠标。 鼠标操作,我们可以使用selenium的ActionChains类来实现

    2024年02月01日
    浏览(21)
  • 【基础】Python+Selenium自动化测试之键盘、鼠标操作

    目录 鼠标操作 导包方法 使用语法 鼠标常用操作 键盘操作 导包方法 使用语法 键盘常用操作 鼠标操作 模拟用户在页面上用鼠标进行的操作 导包方法 使用语法 使用 ActionChains 需要在鼠标操作后,使用 .perform() 提交鼠标操作 链式编程 分布式编程 鼠标常用操作 键盘操作 模拟

    2024年04月28日
    浏览(23)
  • Python爬虫(4)-Selenium模拟鼠标操作

    在Selenium4.2以后的版本里面鼠标的操作方法都封装在了ActionChains中需要时直接取即可。 使用方法就是调用ActionChains然后传入你需要点击的按钮的位置即可 ActionChains(driver).double_click(f1).perform() perform()的意思就是执行所有ActionChains中的动作 具体的操作方法如下 鼠标单击就是直接

    2024年01月19日
    浏览(35)
  • Web自动化测试进阶 —— Selenium模拟鼠标操作

    在实际的web产品测试中,对于鼠标的操作,不单单只有click(),有时候还要用到右击、双击、拖动等操作,这些操作包含在ActionChains类中。 首先导入ActionChains类: from selenium.webdriver.common.action_chains import ActionChains context_click():右击 double_click():双击 drag_and_drop():拖动 move_to_

    2024年02月09日
    浏览(34)
  • 学会了selenium 模拟鼠标操作,你就可以偷懒点点点了

    我们在做 Web 自动化的时候,有时候页面的元素不需要我们点击,值需要把鼠标移动上去就能展示各种信息。 这个时候我们可以通过操作鼠标来实现,接下来我们来讲一下使用 selenium 做 Web 自动化的时候如何来操作鼠标。 鼠标操作,我们可以使用 selenium 的 ActionChains 类来实现

    2024年02月12日
    浏览(29)
  • 计算机视觉OpenCv学习系列:第四部分、键盘+鼠标响应操作

    键盘响应中有一个函数叫做 waitKey ,所有的获取键盘键值都是通过waitKey函数实现的。 1.键盘响应事件 cv.waitKey( [, delay] ) -- retval delay如果没有声明或者delay=0,表示一直阻塞 delay大于0,表示阻塞指定毫秒数 retval返回的对应键盘键值,注意:在不同的操作系统中可能会有差异! 典

    2024年02月09日
    浏览(32)
  • 「Python|Selenium|场景案例」如何模拟鼠标单击、双击、右击、长按和拖拽等操作?

    本文主要介绍如何在使用selenium进行自动化测试的时候模拟各种鼠标操作。 在进行自动化测试的时候,我们可能会需要需要进行鼠标操作的场景,比如: 测试右击,查看是否网页是否屏蔽了右键菜单 面对滑块式登录验证方式,模拟拖拽 模拟前进或后退等鼠标扩展操作 ……

    2023年04月08日
    浏览(34)
  • Selenium:浏览器及鼠标、键盘事件

    目录 一、控制浏览器 二、鼠标事件 三、键盘事件 一、控制浏览器 webdriver主要提供操作页面上各种元素的方法,但它也提供操作浏览器的一些方法,例如控制浏览器大小、前进和后退等。 1、控制浏览器窗口大小 2、全屏显示 webdriver提供了maximize_window()方法使打开的浏览器全

    2024年02月02日
    浏览(27)
  • selenium自动化测试入门 —— 键盘鼠标事件ActionChains

    在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为。比如使用鼠标单击、双击、右击、拖拽等动作;或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作。在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 ActionChains类,在使

    2024年04月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包