Cucumber java - 将 .txt 文件中的字符串添加到 Cucumber 步骤定义
Cucumber java - Adding a string from .txt file to cucumber step definition
我对编程还很陌生,所以请放轻松。
我正在尝试创建一个新场景,允许我输入在文本文件中找到的短语。我目前在 stepdefinition 文件中的内容工作正常,但我想做的是编辑 Cucumber 的每个 运行 之间的文本文件。然后可以在不编辑特征文件的情况下更改搜索词。文本文件只需包含一行。
这是我当前的代码:
@And("^I enter into input field (.*) the search term (.*)$")
public void i_enter_into_input_field_the_search_term(String field, String value) throws Throwable {
// searches the text written in search.txt
field = removeDoubleQuotes(field);
value = removeDoubleQuotes(value);
System.out.println("I enter inptu input field:"+ xpath.get(field) + " and : "+ value);
WebElement element = getDriver().findElement(By.xpath(xpath.get(field)));
element.clear();
element.sendKeys("cucumber help needed");
}
如果您总是读取同一个文件,您可以使用 Files.readAllLines(path, charset) 来读取文件内容并使用它。
我对为什么需要 .txt 文件来更改黄瓜运行之间的任何内容感到有点困惑。您要进行的更改是预定义的吗?
您似乎 运行 成功地将 .feature 文件中的字段和值参数替换到您的测试中,这很可靠。所以我假设你有像
这样的场景
Scenario: I expect this thing to happen
Given some initial step
And I enter into input field FIELD1 the search term VALUE1
Then I expect this thing to happen
那么如果你想用不同的值重新运行相同的场景,像这样编写另一个场景,Cucumber 将只重用与该步骤定义匹配的代码。你不需要再写一个,i_enter_into_input_field_the_search_term 会重新得到。
所以你的功能文件看起来像:
Scenario: I expect this thing to happen
Given some initial step
And I enter into input field FIELD1 the search term VALUE1
Then I expect this thing to happen
Scenario: I expect that thing to happen
Given some initial step
And I enter into input field FIELD2 the search term VALUE2
Then I expect that thing to happen
..等等..等等..
换句话说,如果您提前知道场景中有哪些字段和值,只需将它们全部列在您的功能文件(而不是 .txt)中以涵盖您的所有场景。
我是不是漏掉了什么?
希望有所帮助。
在@Josh 的回答的基础上,您可以使用 Scenario Outline
使非常相似的场景更具可读性。
例如,他的回答中的两个场景在功能上等同于:
Scenario Outline: I expect things to happen
Given some initial step
And I enter into input field <Field_Name> the search term <Value>
Then I expect this thing to happen
Examples:
| Field_Name | Value |
| FIELD1 | VALUE1 |
| FIELD2 | VALUE2 |
然后您可以通过向 Examples
table 添加额外的行来创建更多场景。有关详细信息,请参阅 Cucumber documentation。
我对编程还很陌生,所以请放轻松。
我正在尝试创建一个新场景,允许我输入在文本文件中找到的短语。我目前在 stepdefinition 文件中的内容工作正常,但我想做的是编辑 Cucumber 的每个 运行 之间的文本文件。然后可以在不编辑特征文件的情况下更改搜索词。文本文件只需包含一行。
这是我当前的代码:
@And("^I enter into input field (.*) the search term (.*)$")
public void i_enter_into_input_field_the_search_term(String field, String value) throws Throwable {
// searches the text written in search.txt
field = removeDoubleQuotes(field);
value = removeDoubleQuotes(value);
System.out.println("I enter inptu input field:"+ xpath.get(field) + " and : "+ value);
WebElement element = getDriver().findElement(By.xpath(xpath.get(field)));
element.clear();
element.sendKeys("cucumber help needed");
}
如果您总是读取同一个文件,您可以使用 Files.readAllLines(path, charset) 来读取文件内容并使用它。
我对为什么需要 .txt 文件来更改黄瓜运行之间的任何内容感到有点困惑。您要进行的更改是预定义的吗?
您似乎 运行 成功地将 .feature 文件中的字段和值参数替换到您的测试中,这很可靠。所以我假设你有像
这样的场景Scenario: I expect this thing to happen
Given some initial step
And I enter into input field FIELD1 the search term VALUE1
Then I expect this thing to happen
那么如果你想用不同的值重新运行相同的场景,像这样编写另一个场景,Cucumber 将只重用与该步骤定义匹配的代码。你不需要再写一个,i_enter_into_input_field_the_search_term 会重新得到。
所以你的功能文件看起来像:
Scenario: I expect this thing to happen
Given some initial step
And I enter into input field FIELD1 the search term VALUE1
Then I expect this thing to happen
Scenario: I expect that thing to happen
Given some initial step
And I enter into input field FIELD2 the search term VALUE2
Then I expect that thing to happen
..等等..等等..
换句话说,如果您提前知道场景中有哪些字段和值,只需将它们全部列在您的功能文件(而不是 .txt)中以涵盖您的所有场景。
我是不是漏掉了什么? 希望有所帮助。
在@Josh 的回答的基础上,您可以使用 Scenario Outline
使非常相似的场景更具可读性。
例如,他的回答中的两个场景在功能上等同于:
Scenario Outline: I expect things to happen
Given some initial step
And I enter into input field <Field_Name> the search term <Value>
Then I expect this thing to happen
Examples:
| Field_Name | Value |
| FIELD1 | VALUE1 |
| FIELD2 | VALUE2 |
然后您可以通过向 Examples
table 添加额外的行来创建更多场景。有关详细信息,请参阅 Cucumber documentation。