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 项目 → 下一步。

  • 提供组 ID(组 ID 将在所有项目中唯一标识您的项目)。

  • 提供artifact Id(artifact Id是没有版本的jar的名称。您可以选择任何小写的名称)。

  • 单击“完成”。

  • 打开 pom.xml -

    • 转到 Eclipse 左侧的包资源管理器。

    • 展开项目 CucumberTest。

    • 找到 pom.xml 文件。

    • 右键单击并选择选项“使用“文本编辑器”打开”。

  • 添加Selenium依赖:这将指示Maven,哪些Selenium jar文件将从中央存储库下载到本地存储库。

    • 在编辑模式下打开pom.xml,在项目标签内创建依赖项标签(<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编辑成功后,保存。

    • 转到项目 → 清理 - 这将需要几分钟的时间。

步骤 2 -在src/test/java下创建一个名为dataTable的包

步骤 3 - 创建一个功能文件。

  • 在 dataTable 包中创建一个名为dataTable .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.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 网站已加载。

  • 数据将在注册页面上输入。

  • 将点击提交按钮。

  • 我们会看到主页不会显示,控制台上会写上“Test Pass”。