目录
- Actions 介绍
- 键盘操作处理
- 鼠标操作处理
课程目标
- 掌握 Actions 的概念。
- 掌握鼠标的操作都有哪些及其使用。
- 掌握键盘的操作都有哪些及其使用。
思考
- 测试用例要求使用 Enter 键完成操作,应该如何解决?
- 测试用例要求拖动某一个元素,应该如何解决?
Actions 介绍
用于向浏览器设备输入动作 。
@startmindmap
title Actions 操作
- Actions 操作
** 键盘
** 鼠标
** 笔(了解)
*** 只支持谷歌内核
** 滚轮(了解)
*** v4.2之后支持
*** 只支持谷歌内核
@endmindmap
键盘操作处理
@startmindmap
title 键盘操作
- 键盘输入
** Keys(对象/枚举)
*** 表示常用键位
** 常用方法
*** 按下键位
*** 松开键位
*** 输入信息
@endmindmap
键盘常用键位
键盘操作处理方法
键盘操作演练环境
键盘操作处理-输入(Java)
-
sendKeys()
方法执行键盘输入操作:
actions
.sendKeys(sendEle, “Selenium”)
.sendKeys(Keys.ENTER)
.build()
.perform();
键盘操作处理-组合键(Java)
keyDown()
和 keyUp()
方法模拟组合键
actions
.keyDown(Keys.COMMAND)
.click(AlertEle)
.keyUp(Keys.COMMAND)
.build()
.perform();
鼠标操作处理
@startmindmap
title 鼠标操作处理
- 鼠标操作处理
** 点击操作
*** 双击(重要)
*** 右击(重要)
*** 点击且保持
*** 单击
** 悬停操作
*** 根据元素(重要)
*** 根据坐标
** 拖拽操作
*** 根据元素(重要)
*** 根据坐标
@endmindmap
鼠标操作处理方法
鼠标操作演练环境
双击元素(Java)
- 使用
doubleClick()
方法双击鼠标左键:
//开始使用鼠标、键盘的操作
Actions actions = new Actions(webDriver);
//双击
WebElement doubleBtn = webDriver.findElement(By.id("dblclick"));
actions.doubleClick(doubleBtn).perform();
String text1 = textEle.getText();
System.out.println(text1);
executableList.add(() → assertThat(text1,
containsString(“我是双击按钮–”)));
右击元素(Java)
- 使用
contextClick()
方法单击鼠标右键:
//开始使用鼠标、键盘的操作
Actions actions = new Actions(webDriver);
//右键点击
WebElement rightClickBtn = webDriver.findElement(By.id("rightClick"));
actions.contextClick(rightClickBtn).perform();
sleep(1000);
String text2 = textEle.getText();
System.out.println(text2);
executableList.add(() -> assertThat(text2,
containsString("我是鼠标右键单击按钮--")));
悬停显示文本(Java)
使用moveToElement()
方法在元素上悬停鼠标
//开始使用鼠标、键盘的操作
Actions actions = new Actions(webDriver);
WebElement WriteEle = webDriver.findElement(悬停定位));
//悬停显示文本
actions.moveToElement(WriteEle).perform();
鼠标拖拽(Java)
- 使用
dragAndDrop(原始位置,终点位置)
方法拖动元素:
//从draggerEle元素拖拽到item1Ele
actions
.dragAndDrop(draggerEle, item1Ele)
.perform();
源码地址(Java)
附录:完整依赖配置(Java)
<!-- 版本配置-->
<properties>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>11</java.version>
<junit.jupiter.version>5.9.2</junit.jupiter.version>
<maven.compiler.version>3.11.0</maven.compiler.version>
<maven-surefire-plugin.version>3.0.0</maven-surefire-plugin.version>
<!-- log日志 -->
<slf4j.version>2.0.7</slf4j.version>
<logback.version>1.4.6</logback.version>
<!-- allure报告 -->
<allure.version>2.21.0</allure.version>
<aspectj.version>1.9.19</aspectj.version>
<allure.maven.version>2.12.0</allure.maven.version>
<allure.cmd.download.url>
https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline
</allure.cmd.download.url>
<!-- hamcrest断言 -->
<hamcrest.version>2.2</hamcrest.version>
<!-- yaml对应解析 -->
<jackson.version>2.14.2</jackson.version>
<!-- selenium安装 -->
<selenium.verison>4.8.3</selenium.verison>
<webdriver.manager.version>5.3.2</webdriver.manager.version>
</properties>
<dependencyManagement>
<!-- junit5 版本管理, 找到对应依赖关系的 pom 文件,为了解决依赖冲突问题-->
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.jupiter.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- junit 相关依赖下载-->
<!-- junit5 -->
<dependency>
<!-- 组织的名称;仓库中唯一标识一个项目,确保项目的唯一性 -->
<groupId>org.junit.jupiter</groupId>
<!-- 项目的名称或模块的名称 -->
<artifactId>junit-jupiter</artifactId>
<!-- 依赖的作用范围
compile:默认的作用范围,表示在编译阶段和运行时都是可见的
test:表示依赖只在测试阶段 src/test下可见。
provided:表示依赖在编译阶段和测试阶段是可见的。
runtime:表示依赖在编译阶段不可见,但在运行时可见。-->
<scope>test</scope>
</dependency>
<!-- junit5-suite -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<!-- 用做兼容老版本 -->
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
<!-- hamcrest断言 -->
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>${hamcrest.version}</version>
<scope>test</scope>
</dependency>
<!-- yaml文件解析-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- log日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>compile</scope>
</dependency>
<!-- allure报告-->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>${allure.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<!-- selenium安装 -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.verison}</version>
</dependency>
<!-- webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>${webdriver.manager.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- maven 命令行执行插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
<includes>
<include>**/*Test</include>
<include>**/Test*</include>
</includes>
</configuration>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
</dependencies>
</plugin>
<!--maven 编译使用插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<parameters>true</parameters>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${maven.compiler.encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>${allure.maven.version}</version>
<configuration>
<reportVersion>${allure.version}</reportVersion>
<allureDownloadUrl>${allure.cmd.download.url}/${allure.version}/allure-commandline-${allure.version}.zip</allureDownloadUrl>
</configuration>
</plugin>
</plugins>
</build>