【问题标题】:Global Enviromental Variables for cucumber-jvm & selenium WebDrivercucumber-jvm 和 selenium WebDriver 的全局环境变量
【发布时间】:2018-10-25 21:44:46
【问题描述】:

我为网站编写自动化测试。我使用的是 cucumber-jvm 和 selenium webdriver。 我想在我的项目中有类似配置的东西。

例如假设我想测试两个网站的自动化。这两个网站上的一切都是一样的。 例如,在我的功能中,我有两种情况 - 用户名字段的成功自动化和边界检查。

想象一下我的功能文件是这样的:

Scenario: User enters valid parameters ....
Given  User is on main page 
When   User enters "username" as "username"
When   User enters "Test@123" as "password" 
#Then   do something

Scenario: User tries to enter more than 20 characters in username field 
Given User is on main page 
When  User enters "30" characters as "username" 
Then  text length in the "username" field should be "20" 

但网站的用户名和密码不同。用户名字段的最大长度也不同。我想要以下内容:

Scenario: User enters valid parameters 
Given  User is on main page 
When   User enters "@username" as "username"
When   User enters "@password" as "password" 
#Then   do something

Scenario: User tries to enter more than 20 characters in username field 
Given User is on main page 
When  User enters "30" characters as "username" 
Then  text length in the "username" field should be "@max_length_username" 

当我更改我的网站时,我只想更改一些文件,其中定义了这个全局变量。

例如,在我的代码中,我有 @given 方法

public void user_is_on_Registration_page() throws Exception {
    driver.get("https://website.test");
    username.sendKeys("username");
    password.sendKeys("Test123");
}

我想把它改成方法:

public void user_is_on_Registration_page() throws Exception {
    driver.get(website);
    username.sendKeys(username);
    password.sendKeys(password);
}

我想要一个文件,我可以在其中设置所有配置和变量,并在我的 .java 和 .feature 文件中使用它们。 我怎样才能做到这一点?

【问题讨论】:

  • 网站是一起测试还是分开测试?如果单独设置,那么您可以设置系统属性或与被测网站标识符类似的东西。创建一个具有逻辑的类,以根据系统属性从适当的配置文件中访问实际的键和值。将特征文件中的值传递给该类以获取实际值。
  • 谢谢 Grasshoper,我按照你的解决方案做了

标签: selenium-webdriver automated-tests cucumber cucumber-jvm


【解决方案1】:

我找到了答案,这不是最好的方法,但它有效。

我有类变量。

public class Variables {
 public String valid_username = "someusername";
 public String valid_password = "Test@123";
 public Map<String,String> variables = new HashMap<String,String>();
 public Variables(){
     variables.put("valid_username",valid_username);
     variables.put("valid_password",valid_password);
  }
 public String getVariable(String key){
     return variables.get(key);  
 }
 }

这是配置。 在功能中我有步骤:

  When User enters "valid_username" as username
  And User enters "valid_password" as password

就是这样。然后在我的步骤定义中,我只需调用

variables.getVariable(arg1);  //arg1 is "valid_username" from feature file

【讨论】:

  • 嗯。这种方法有多“全球化”?我的意思是,通过这种方式,您可以在实例化变量类的步骤之间共享变量,对吗?但是,如果我想在不同类的步骤之间共享变量,我该怎么办?也许带有静态修饰符?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
相关资源
最近更新 更多