jck28-lucio-高级控件交互方法

目录

  • Actions 介绍
  • 键盘操作处理
  • 鼠标操作处理

课程目标

  1. 掌握 Actions 的概念。
  2. 掌握鼠标的操作都有哪些及其使用。
  3. 掌握键盘的操作都有哪些及其使用。

思考

  1. 测试用例要求使用 Enter 键完成操作,应该如何解决?
  2. 测试用例要求拖动某一个元素,应该如何解决?

Actions 介绍

用于向浏览器设备输入动作
@startmindmap
title Actions 操作

  • Actions 操作
    ** 键盘
    ** 鼠标
    ** 笔(了解)
    *** 只支持谷歌内核
    ** 滚轮(了解)
    *** v4.2之后支持
    *** 只支持谷歌内核
    @endmindmap

键盘操作处理

@startmindmap
title 键盘操作

  • 键盘输入
    ** Keys(对象/枚举)
    *** 表示常用键位
    ** 常用方法
    *** 按下键位
    *** 松开键位
    *** 输入信息
    @endmindmap

键盘常用键位

键盘操作处理方法

image

键盘操作演练环境

键盘操作处理-输入(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

鼠标操作处理方法

鼠标操作演练环境

鼠标点击测试页面

image
鼠标悬停测试页面

鼠标拖拽测试页面

双击元素(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>