Cucumber - 数据表
在进行自动化时,我们可能会遇到各种各样的情况。每种情况都有不同的含义和需求。
从一开始,我们就以社交网站的登录功能为例,其中我们只需要传递两个输入参数。让我们想想更多的可能性。"新用户注册"功能怎么样?通常,在为社交网站注册新用户时,输入参数可以是什么?类似于以下 −
- 用户名
- 电子邮件地址
- 密码
- 重新输入密码
- 生日
- 性别
- 电话号码
功能 −新用户注册。
在输入错误信息后,验证新用户注册是否失败。
假设我在新用户注册页面上。
当我输入用户名和电子邮件地址作为电子邮件地址和密码为,并重新输入密码为、出生日期为、性别为和电话号码为时,用户注册应该会失败。
乍一看有点乱。那么,有没有更好的方法来管理这样的输入呢?答案可以是"数据表"。数据表是一组为单个标签提供的输入。这个标签可以是GIVEN、WHEN或THEN。
让我们在数据表的帮助下编写上述场景,它将看起来像下面的−
假设我在新用户注册页面上
当我在页面上输入有效数据时
| Fields | Values | | First Name | Tom | | Last Name | Kenny | | Email Address | someone@someone.com | | Re-enter Email Address | someone@someone.com | | Password | Password1 | | Birthdate | 01 |
然后用户注册应该会成功。
示例
让我们自动化一个数据表的示例。
步骤 1 − 创建一个名为"DataTableTest"的 Maven 测试项目。
转到文件 → 新建 → 其他 → Maven → Maven 项目 →下一步。
提供group Id(group Id 将在所有项目中唯一地标识您的项目)。
提供artifact Id(artifact Id 是 jar 的名称,不带版本。您可以选择任何小写的名称)。
单击完成。
打开 pom.xml −
转到 Eclipse 左侧的包资源管理器。
展开项目 CucumberTest。
找到 pom.xml 文件。
右键单击并选择选项,使用"文本编辑器"打开。
添加 Selenium 依赖项:这将指示Maven,其中 Selenium jar 文件将从中央存储库下载到本地存储库。
以编辑模式打开 pom.xml,在 project 标签内创建依赖项标签 (<dependencies></dependencies>)。
在 dependency 标签内,创建 dependency 标签。(<dependency></dependency>)。
在 dependency 标签内提供以下信息。
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.47.1</version> </dependency>
添加 Cucumber-Java 依赖项 − 这将指示 Maven,哪些 Cucumber 文件将从中央存储库下载到本地存储库。
再创建一个依赖项标签。
在依赖项标签内提供以下信息。
<dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java</artifactId> <version>1.0.2</version> <scope>test</scope> </dependency>
添加 Cucumber-JUnit 依赖项 − 这将指示 Maven,哪些 Cucumber JUnit 文件将从中央存储库下载到本地存储库。
再创建一个依赖项标签。
在依赖项标签内提供以下信息。
<dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-junit</artifactId> <version>1.0.2</version> <scope>test</scope> </dependency>
添加 JUnit 依赖项 − 这将指示 Maven,哪些 JUnit 文件将从中央存储库下载到本地存储库。
再创建一个依赖项标签。
在依赖项标签内提供以下信息
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency>
验证二进制文件。
成功编辑 pom.xml 后,保存它。
转到项目 → Clean − 这将需要几分钟。
步骤 2 − 在 src/test/java
下创建一个名为 dataTable 的包步骤 3 − 创建一个功能文件。
在包 dataTable 内创建一个功能文件,命名为 dataTable.feature(有关更详细的步骤,请参阅场景概述部分)。
编写以下文本。
Feature −数据表
验证新用户注册是否在输入错误后失败。
场景:
假设我在新用户注册页面
当我在页面上输入无效数据时
| Fields | Values | | First Name | Tom | | Last Name | Kenny | | Email Address | someone@someone.com | | Re-enter Email Address | someone@someone.com | | Password | Password1 | | Birthdate | 01 |
然后用户注册应该会失败
保存文件。
步骤 4 − 创建步骤定义文件。
在包dataTable中创建名为"dataTable.java"的步骤定义文件(有关更详细的步骤,请参阅场景概述部分)。
编写以下代码。
package dataTable; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; import cucumber.annotation.en.Given; import cucumber.annotation.en.Then; import cucumber.annotation.en.When; import cucumber.table.DataTable; public class stepdefinition { WebDriver driver = null; @Given("^I am on new user registration page$") public void goToFacebook() { //Intiate web browser instance. driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter invalid data on the page$") public void enterData(DataTable table){ //Initialize data table List<list> data = table.raw(); System.out.println(data.get(1).get(1)); //Enter data driver.findElement(By.name("firstname")).sendKeys(data.get(1).get(1)); driver.findElement(By.name("lastname")).sendKeys(data.get(2).get(1)); driver.findElement(By.name("reg_email__")).sendKeys(data.get(3).get(1)); driver.findElement(By.name("reg_email_confirmation__")). sendKeys(data.get(4).get(1)); driver.findElement(By.name("reg_passwd__")).sendKeys(data.get(5).get(1)); Select dropdownB = new Select(driver.findElement(By.name("birthday_day"))); dropdownB.selectByValue("15"); Select dropdownM = new Select(driver.findElement(By.name("birthday_month"))); dropdownM.selectByValue("6"); Select dropdownY = new Select(driver.findElement(By.name("birthday_year"))); dropdownY.selectByValue("1990"); driver.findElement(By.className("_58mt")).click(); // Click submit button driver.findElement(By.name("websubmit")).click(); } @Then("^User registration should be unsuccessful$") public void User_registration_should_be_unsuccessful() { if(driver.getCurrentUrl().equalsIgnoreCase("https://www.facebook.com/")){ System.out.println("Test Pass"); } else { System.out.println("Test Failed"); } driver.close(); } }
保存文件。
步骤 5 − 创建一个运行器类文件。
在包内创建名为 runTest.java 的运行器类。
编写以下代码。
package dataTable; import org.junit.runner.RunWith; import cucumber.junit.Cucumber; @RunWith(Cucumber.class) @Cucumber.Options(format = {"pretty", "html:target/cucumber"}) public class runTest { }
保存文件。
使用选项运行测试
从包资源管理器中选择 runTest.java 文件。
右键单击并选择选项"以...身份运行"。
选择 JUnit 测试。
成功执行后,您可能会观察到以下情况。
Facebook 网站已加载。
数据将在注册页面上输入。
提交按钮将点击。
我们将看到主页不会显示,控制台上会显示"测试通过"。