Gradle、JUnit 5和Jupiter Selenium

Selenium是一组支持浏览器自动化的工具,主要用于Web应用程序测试。Selenium的组件之一是Selenium WebDriver,它提供客户端库,JSON有线协议(与浏览器驱动程序进行通信的协议)和浏览器驱动程序。Selenium WebDriver的主要优点之一是,它几乎支持所有主要编程语言,并且可以在所有主流操作系统上运行。

在本文中,将使用Gradle与Java,JUnit 5和Selenium Jupiter一起完成流行的TodoMVC应用程序的测试自动化项目的设置。您将了解Selenium的PageFactory实现页面对象模式。您还将了解并行测试执行,测试执行顺序,参数化测试等等。

测试准备

首先,Java JDK是必需的,并且必须将其安装在系统中。我建议安装OpenJDK而不是Oracle JDK。您还需要Gradle来启动一个新项目和您喜欢的Java IDE –建议使用IntelliJ IDEA Community或Professional,当然也少不了git。

开始之前,确保已安装以下工具并可供您使用:

  • Java JDK:建议使用最新的Java JDK版本
  • Gradle:仅在设置项目时需要,建议使用Gradle 5.6+
  • Java IDE:IntelliJ IDEA
  • Chrome浏览器:用于运行Selenium测试
  • 终端:用于执行shell命令,至少对Unix命令具有基本支持
  • Git:跟踪源代码历史记录

从头开始

要创建一个基于Gradle的空项目,请打开终端并输入:

mkdir demo
cd demo
gradle init --type basic --dsl groovy

生成的项目是一个空的DIY项目:没有插件,也没有依赖项。它带有settings.gradle可以删除的冗余:

rm settings.gradle

Java和JUnit 5

对于使用JUnit 5的基本Java项目配置,将以下内容添加到中build.gradle:

plugins {
id 'java'
} repositories {
mavenCentral()
} dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')
} test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
}

上面的DSL配置了Gradle的Java插件(plugins),该插件为我们提供了使用Gradle构建基于Java的项目的功能。该项目使用Maven存储库(repositories)下载在项目dependencies中声明的项目依赖项()。将项目的测试实现依赖项设置为JUnit 5(testImplementation),并调整任务(test),以确保在使用Gradle执行测试时使用JUnit 5

可以通过在终端中执行Gradle构建来验证配置:

./gradlew build

构建成功:

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

./gradlew命令运行Gradle Wrapper而不是全局Gradle发行版。该项目是由Gradle Wrapper生成的,因此根本不需要执行全局Gradle分发即可执行任务和使用该项目。

JUnit Jupiter

为了简化项目中Selenium WebDriver的配置,我将使用Selenium Jupiter,它是JUnit 5扩展,旨在简化JUnit 5测试中对Selenium(WebDriverGrid)的使用。它是一个单独的依赖项,需要添加到以下项的依赖项列表中build.gradle

dependencies {
testCompile('io.github.bonigarcia:selenium-jupiter:3.3.0')
}

Selenium Jupiter库提供了与SeleniumAppium的集成。Selenium Jupiter支持本地和远程浏览器,Docker容器中的浏览器(需要Docker引擎)以及基于Selenide的浏览器配置。它在内部使用WebDriverManager来管理浏览器驱动程序。

  • 注意:不要惊讶于项目中有很多库,Selnium Jupiter有很多依赖性。要查看所有项目依赖项(包括传递性依赖项),请执行以下命令:./gradlew dependencies

目录和项目文件

该项目创建时没有Java源文件。要创建初始目录和第一个测试,可以执行以下命令:

mkdir -p src/test/java/demo/selenium/todomvc
touch src/test/java/demo/selenium/todomvc/SeleniumTest.java

SeleniumTest.java文件包含非常基本的测试,确认项目已正确配置。该测试使用Selenium Jupiter提供的JUnit 5扩展,并且只有一个测试,没有断言:

package pl.codeleak.demos.selenium.todomvc;

import io.github.bonigarcia.seljup.SeleniumExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.openqa.selenium.chrome.ChromeDriver; @ExtendWith(SeleniumExtension.class)
class SeleniumTest { @Test
void projectIsConfigured(ChromeDriver driver) {}
}

运行测试

执行Gradle构建应确认测试通过:

./gradlew build

demo.selenium.todomvc.SeleniumTest > projectIsConfigured() PASSED

BUILD SUCCESSFUL in 1s
3 actionable tasks: 2 executed, 1 up-to-date

  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。

技术类文章精选

非技术文章精选

JUnit 5和Selenium基础(一)的更多相关文章

  1. JUnit 5和Selenium基础(三)

    在这一部分教程中,将介绍JUnit 5的其他功能,这些功能将通过并行运行测试,配置测试顺序和创建参数化测试来帮助减少测试的执行时间.还将介绍如何利用Selenium Jupiter功能,例如通过系统属 ...

  2. JUnit 5和Selenium基础(二)

    使用Selenium内置的PageFactory实现页面对象模式 在这一部分中,将通过Selenium的内置PageFactory支持类来介绍Page Object模式的实现.PageFactory提 ...

  3. 「译」JUnit 5 系列:基础入门

    原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...

  4. 【Python爬虫】selenium基础用法

    selenium 基础用法 阅读目录 初识selenium 基本使用 查找元素 元素互交操作 执行JavaScript 获取元素信息 等待 前进后退 Cookies 选项卡管理 异常处理 初识sele ...

  5. Selenium | 基础入门 | 截屏并保存于本地

    可先参考   Selenium | 基础入门 | 利用Xpath寻找用户框 核心代码: //截屏操作 File srcFile = ((TakesScreenshot)driver).getScree ...

  6. web 自动化测试 selenium基础到应用(目录)

    第一章   自动化测试前提及整体介绍 1-1功能测试和自动化测试的区别 1-2自动化测试流程有哪些 1-3自动化测试用例和手工用例的区别 1-4 自动化测试用例编写 1-5 selenium的优势以及 ...

  7. selenium基础-图形验证码

    selenium基础-图形验证码 一.图形验证码作用 设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站 二.图形验证码是由客户端生成还是由服务器端生成的? 图形验证码是由服务器端生成 ...

  8. selenium基础-跳过验证码

    selenium基础-跳过验证码 一.方法 设置万能验证码或者屏蔽验证码(最常用的方法) 使用验证码识别工具识别验证码 通过selenium操作cookies 直接使用配置文件的webdriver 二 ...

  9. selenium基础(下拉菜单操作)

    selenium基础(下拉菜单操作) 非select/option元素: 1.触发下拉列表出现 2.等待下拉列表中的元素出现,然后进行选择元素即可. select/option元素: 下拉框操作-Se ...

随机推荐

  1. php中 instanceof有什么作用

    php中 instanceof有什么作用 作用:(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口.

  2. 5分钟了解为什么学习Go

    1.什么是Go语言? Google开源 编译型语言 21世纪的C语言(主流编程语言都是单线程环境下发布的) 2.Go语言的特点? 简单易学习(类似python学习难度,自带格式化) 开发效率高 执行性 ...

  3. java什么是方法(Method)?

    方法是一组为了实现特定功能的代码块的集合.方法在语法上的功能主要有以下两个: ①:结构化代码 将代码按照功能进行组织,使代码的结构比较清晰,容易阅读和修改,也就是程序的可维护性强. ②:减少代码重复 ...

  4. MYSQL设置远程账户登陆总结,mysql修改、找回密码、增加新用户,MySQL数据库的23个注意事项

    1.5 设置及修改Mysql root用户密码1 设置密码方法mysqladmin -u root password '123456'mysqladmin -u root -p'123456' pas ...

  5. set和map容器、

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...

  6. Pytorch的LSTM的理解

    class torch.nn.LSTM(*args, **kwargs) 参数列表 input_size:x的特征维度 hidden_size:隐藏层的特征维度 num_layers:lstm隐层的层 ...

  7. 51nod1327 棋盘游戏

    远古大坑 神仙DP状态设计题 https://blog.csdn.net/white_elephant/article/details/83592103 从行的角度入手,无论如何都要状压 每列最多放一 ...

  8. Echarts构建图表

    Echarts学习-构建图表 相信有很多的前端开发人员在开发Echarts图表的过程中都遇到对图表结构过无从下手,面对一大堆的专业词汇一脸懵逼的样子,在经过了一段时间的踩坑后,终于摸索出了一套完善的学 ...

  9. MySQL查询语句积累

    #查询名字中带李且名字是两个字的所有学生信息 SELECT * FROM user_test WHERE user_name LIKE '李_';

  10. 手把手教你用ngrx管理Angular状态

    本文将与你一起探讨如何用不可变数据储存的方式进行Angular应用的状态管理 :ngrx/store——Angular的响应式Redux.本文将会完成一个小型简单的Angular应用,最终代码可以在这 ...