从Gherkin语句中转义一个数字或带引号的字符串

时间:2012-04-13 16:39:48

标签: java cucumber gherkin

如果我的功能定义中有这样的子句:

Then I can see the "/relative-url-path" page

黄瓜会施加这种方法:

@When("^I can see the \"([^\"]*)\" page$")
public void I_open_the_page(String arg1) {
    // Express the Regexp above with the code you wish you had
    throw new PendingException();
}

如果我想用引号突出显示URL相对部分,我怎样才能强制gherkin解析器将THEN close解释为“普通字符串”。换句话说,我可以逃避它吗?

如果我有号码,同样的问题?

2 个答案:

答案 0 :(得分:1)

首先,如果您使用Ruby作为步骤定义,我认为在'When'前面不应该有@符号。这可能会导致您遇到问题(我不知道。)如果您不使用Ruby,那么了解您用于步骤定义的语言会很有帮助。

我可以告诉你我用引号中的文件路径做了什么:

When I upload invoice "C:\Ruby193\automation\myfile.txt"

然后我使用了这段代码:

When /^I upload invoice "(.*)"$/ do |filename|
  @upload_invoice_page = UploadInvoicePage.new(@test_env)
  @upload_invoice_page.upload_file(filename, 'BIRD, INC.')
end

在这个例子之后,在Ruby中我会为你的步骤尝试这个代码:

When /^ can see the "(.*)" page$/

您的代码看起来可能是Java,因此它可能类似于:

@When("^I can see the \"(.*)\" page$")

你可以在那里放置一个更复杂的正则表达式,但由于它是一个Gherkin步骤,你并不需要它。看起来你现在正试图获得任何不是双引号的东西。您不需要这样做,因为正则表达式已经在寻找一个开放和接近的报价。

请记住,你也可以完全摆脱这些引用:

Then I can see the /relative-url-path page

@When("^I can see the (.*) page$")

如果您觉得它更易于阅读,请仅保留引号。有关正则表达式的更多信息

仅匹配您要执行的数字:

Then I can see the 123456

@Then("^I can see the (\d*)$")

我发现理查德劳伦斯的Cucumber Regex Cheatsheet非常有帮助。你会发现你需要的大部分模式。如果您需要更复杂的模式,您可以考虑在步骤定义代码中进行评估是否更好。

答案 1 :(得分:0)

根据讨论,听起来你想要一个non-capturing group。这将允许您指定任何URL,但在实际步骤中完全忽略它(即它不作为参数传递)。

?:放在组的开头会使其成为非捕获组。

@When("^I can see the \"(?:[^\"]*)\" page$")
public void I_open_the_page() {
    // Express the Regexp above with the code you wish you had
    throw new PendingException();
}