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。
开始之前,确保已安装以下工具并可供您使用:
要创建一个基于Gradle的空项目,请打开终端并输入:
mkdir demo cd demo gradle init --type basic --dsl groovy
生成的项目是一个空的DIY项目:没有插件,也没有依赖项。它带有settings.gradle可以删除的冗余:
rm settings.gradle
对于使用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分发即可执行任务和使用该项目。
为了简化项目中 Selenium WebDriver
的配置,我将使用 Selenium Jupiter
,它是JUnit 5扩展,旨在简化 JUnit 5
测试中对Selenium( WebDriver
和 Grid
)的使用。它是一个单独的依赖项,需要添加到以下项的依赖项列表中 build.gradle
:
dependencies { testCompile('io.github.bonigarcia:selenium-jupiter:3.3.0') }
Selenium Jupiter
库提供了与 Selenium
和 Appium
的集成。 Selenium Jupiter
支持本地和远程浏览器,Docker容器中的浏览器(需要Docker引擎)以及基于Selenide的浏览器配置。它在内部使用 WebDriverManager
来管理浏览器驱动程序。
./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