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将在所有项目中唯一标识您的项目).

  • 提供工件ID (工件ID是没有版本的jar的名称.您可以选择任何小写的名称.)

  • 点击完成.

  • 打开pom.xml :

    • 转到Eclipse左侧的package explorer.

    • 展开项目CucumberTest.

    • 找到pom.xml文件.

    • 右键单击并选择选项,使用"文本编辑器"打开.

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

    • 打开pom.xml处于编辑模式,在项目标记内创建依赖项标记(< dependencies></dependencies>).

    • 在dependencies标记内,创建依赖标记. (< 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 .feature的特征文件package dataTable(有关详细步骤,请参阅方案大纲部分).

  • 撰写以下文字.

    功能 : 数据表

    在传递错误输入后验证新用户注册是否失败.

    场景:

    鉴于我在新用户注册页面

    当我在页面上输入无效数据时

| 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网站.

  • 将输入数据注册页面.

  • 点击提交按钮.

  • 我们会看到主页不会显示,并且"测试通行证"将写在控制台上.