0

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

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

Cucumber 会强加这个方法:

@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 解释为“纯字符串”。换句话说,我能以某种方式逃避它吗?

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

4

2 回答 2

1

首先,如果您使用 Ruby 进行步骤定义,我认为您的“何时”前面不应该有 @ 符号。这可能会给您带来问题(我不知道。)如果您不使用 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$")

您可以在其中放置一个更复杂的 Regex,但由于它是 Gherkin 步骤,因此您并不需要它。看起来目前您正在尝试获取不是双引号的任何内容。您不需要这样做,因为 Regex 已经在寻找开放式和关闭式报价。

请记住,您也可以完全摆脱引号:

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*)$")

我发现 Richard Lawrence 的Cucumber Regex Cheatsheet非常有帮助。你会在那里找到你需要的大部分模式。如果您需要更复杂的模式,您可以考虑是否最好在步骤定义代码中进行评估。

于 2012-04-16T16:22:56.597 回答
0

根据讨论,听起来您想要一个非捕获组。这将允许您指定任何 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();
}
于 2012-04-19T13:55:21.863 回答