Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建步骤定义来处理动态数据输入?_Java_Webdriver_Cucumber_Cucumber Jvm_Gherkin - Fatal编程技术网

Java 如何创建步骤定义来处理动态数据输入?

Java 如何创建步骤定义来处理动态数据输入?,java,webdriver,cucumber,cucumber-jvm,gherkin,Java,Webdriver,Cucumber,Cucumber Jvm,Gherkin,我已经搜索了一些,但找不到确切的例子。我有一张表格要填。表单字段如下所示: 日期: 货币: 总计: 说明: 但并非所有字段都需要用户输入数据。而不是编写几种方法来解释不同的组合,例如: (When I enter the 'Date' and 'Currency' and 'Total' and 'Description') (When I enter the 'Date' and 'Total') (When I enter the 'Currency' and 'Descriptio

我已经搜索了一些,但找不到确切的例子。我有一张表格要填。表单字段如下所示:

日期:
货币:
总计:
说明:

但并非所有字段都需要用户输入数据。而不是编写几种方法来解释不同的组合,例如:

(When I enter the 'Date' and 'Currency' and 'Total' and 'Description')  
(When I enter the 'Date' and 'Total')  
(When I enter the 'Currency' and 'Description')  
etc...
我想以某种方式在功能文件中实现如下内容:

When I enter the following details:  
  |Date        |x    |       
  |Currency    |USD  |  
  |Total       |100  |   
  |Description |Test |  
然后有一个方法来处理用户在第二列中输入的任何数据组合

我发现有以下数据表驱动示例的站点:

When I enter the following details:  
  |Date        |<date>        |       
  |Currency    |<currency>    |  
  |Total       |<total>       |   
  |Description |<description> |  

Example data:
  |date |currency |total |description |  
  |x    |USD      |100   |foo         |
  |y    |EUR      |200   |test        |
  |z    |HKD      |124   |bar         |
当我输入以下详细信息时:
|日期| |
|货币| |
|总计| |
|描述| |
示例数据:
|日期|货币|总额|说明|
|x |美元| 100 |富|
|y |欧元| 200 |测试|
|z | HKD | 124 |巴|

但那不是我想要的。我不需要遍历预先确定的示例数据列表。我希望我已经足够清楚地总结了这个问题,并且有人知道一个好地方可以找到这种实现的示例。谢谢你的建议

我能理解的是,您正在尝试对表单中的这4个字段进行组合测试。如果是这样的话,那么您需要查看ScenaioOutline选项,我认为您所指的是所谓的数据表驱动。这将允许您举出所有组合作为示例。每个示例都将作为一个单独的场景选取和运行。您可以修改您的设置,使其看起来像这样-

Scenaio Outline:
...
...
When I enter the following details : Date <date> Currency <currency>.......
...
...
Examples:
  |date |currency |total |description |  
  |x    |USD      |100   |foo         |
  |y    |EUR      |200   |test        |
  |z    |HKD      |124   |bar         |
Scenaio大纲:
...
...
当我输入以下详细信息时:日期货币。。。。。。。
...
...
示例:
|日期|货币|总额|说明|
|x |美元| 100 |富|
|y |欧元| 200 |测试|
|z | HKD | 124 |巴|
如果将“示例”表中的任何数据留空,则“留空”将发送到When步骤

或者-如果您希望从对象列表中的Whenstep获取数据,该列表具有与日期、货币等相对应的实例变量,则可以在步骤定义中使用list参数。这样可以避免编写模式表达式。然后你的脚步就变慢了

When I enter the following details : 
date   | currency   | .......
<date> | <currency> | .......
当我输入以下详细信息时:
日期|货币|。。。。。。。
|  | .......

确保实例变量名称与您创建的对象中的表标题匹配。

是的,您可以使用数据表作为单个非重复步骤的参数。数据表的第一行必须是标题:

When I enter the following details:
  |Name        |Value|
  |Date        |x    |
  |Currency    |USD  |
  |Total       |100  |
  |Description |Test |
以下是一种可能的步骤使用方法:

@Given("^I enter the following details:$")
public void i_enter_the_following_details(Map<String, String> details) throws Throwable {
    for Map.Entry<String, String> entry : details.entrySet() {
        String key = entry.getKey();
        String value = entry.getValue();
        switch (key) {
            case "Date":
                // add the date to the form
                break;
            // ...
        }
    }
}
@给定(^I输入以下详细信息:$)
public void i\u输入\u以下的\u详细信息(地图详细信息)可丢弃{
对于Map.Entry:details.entrySet(){
String key=entry.getKey();
字符串值=entry.getValue();
开关(钥匙){
案件“日期”:
//将日期添加到表单中
打破
// ...
}
}
}
您还可以通过声明具有该类型的参数,以值对象的
数据表
、列表、列表或列表的形式获取该表<代码>地图在这里似乎最简单

我这样写这个例子是因为我假设您需要编写不同的代码来将每个值放入其字段中。如果每个字段的代码都是相同的,那么您可以将字段的CSS选择器放入数据表中,然后去掉开关


更多的例子是和。

可能只是我,但我觉得你的目标不是很明确。。您想尝试不同的输入作为测试,但不想使用数据表?为什么?这正是它要做的。你能再详细解释一下为什么要避免这种方法吗?我不需要对单个测试的值进行迭代。数据表不是这样做的吗?在下游,我们的应用程序根据用户在字段中输入的内容采用不同的功能和UI路径。在某些情况下,它们不会填充所有字段。此步骤只是根据用户输入的内容将其“馈送”到后续步骤中。很抱歉,如果不清楚的话……如果不把它画出来,很难解释我想做什么。即使是这样,你也可以使用下面答案中提到的
场景大纲
,它也可以构造一个表。但是使用它,您还可以列出
When
步骤作为测试变量可能产生的结果。如果我理解正确的话,你想测试一组输入和相应的输出。只是一个简单的问题。例如,如果用户没有输入日期,那么日期代码是否仍会被执行?我遇到的问题是,我只需要在实际输入字段数据时执行代码,如果没有输入,则忽略代码。我想我可以用一些有创意的“if/then”语句来实现这一点,但如果我不需要,那就更好了。哦,我忘了处理可选字段。修订过的。还要注意,有一个标题行。啊,这可能正是我想要的。Thx,我会试一试,然后再报告!确认。这很好用。谢谢,也谢谢所有回复建议的人。