1 工程结构与 Maven 依赖
该示例工程结构如下:
text
复制代码
cucumber-ui-test-demo ├─ src/test │ ├─ java │ │ └─ com.example.tests │ │ ├─ stepdefs │ │ │ ├─ LoginStep.java │ │ │ └─ CreateIssueStep.java │ │ ├─ pages │ │ │ ├─ LoginPage.java │ │ │ └─ IssuesPage.java │ │ ├─ utils │ │ │ ├─ GoogleAuthenticatorUtil.java │ │ │ └─ WebDriverFactory.java │ │ │ └─ ConfigUtil.java │ │ ├─ hooks │ │ │ └─ ScreenshotHook.java │ │ └─ TestRunner.java │ └─ resources │ ├─ features │ │ └─ github-issues.feature │ └─ config.properties └─ pom.xml
下面简单介绍一下各个包、文件夹及文件的功能:
-
包
stepdefs
该包用于放置 Step Definitions 实现类,即 Cucumber 特性文件中定义的各个步骤对应的 Java 实现。
LoginStep.java
负责登录相关步骤的实现,CreateIssueStep.java
负责创建 Issues 相关步骤的实现。注意,该示例工程做了分层设计,具体 Selenium 操作浏览器的逻辑未在该包下实现,而是统一放置于pages
包下,该包下的类只负责调用pages
包下相应的实现。 -
包
pages
该包用于放置具体的页面对象(Page Object)类,负责调用 Selenium 操作浏览器。
-
包
utils
该包用于放置工具类。
GoogleAuthenticatorUtil.java
用于 Google Authenticator Code 的生成;WebDriverFactory.java
用于统一获取 SeleniumWebDriver
;ConfigUtil.java
用于读取配置文件信息。 -
包
hooks
该包用于放置 Cucumber 钩子,使用钩子可以为每个场景(Scenario)或步骤(Step)添加前置或后置逻辑。该包下的
ScreenshotHook.java
负责为 Cucumber 场景中的每个步骤执行后对当前网页截图并将其附加到最终报告里。 -
文件
TestRunner.java
该类为测试工程入口。
-
文件夹
resources/features
该文件夹为 Cucumber 特性文件所在文件夹。
-
文件
resources/config.properties
该文件为工程配置文件,用于放置 GitHub 账号、密码以及双因子鉴权秘钥。
该示例工程用到的依赖如下:
xml
复制代码
<dependencies> <!-- cucumber --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>${cucumber.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit</artifactId> <version>${cucumber.version}</version> <scope>test</scope> </dependency> <!-- selenium --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifact