Watir / Cucumber中的转义字符问题

时间:2012-07-13 10:37:40

标签: watir

希望有人可以帮我解决我在Cucumber / Watir中遇到转义字符的问题。

我有自动化测试设置。当我执行搜索时,我使用的一个断言来验证搜索是否返回了正确的结果是检查页面是否有文本。所以我的代码看起来像这样:

Then /^I should see the following text: "([^"]*)"$/ do |str|
  assert @browser.text.include?(str)
end

这里我传入文本以在字符串变量中搜索。例如nike,reebok等

所以在我的功能文件中,步骤是这样的:

Then  I should see the following text "search results for nike"

除1个问题外,这个工作正常。我正在测试的其中一个网站决定将搜索词用双引号括起来,即搜索结果为“nike”

结果这搞砸了我的测试,因为我需要将引号作为搜索词的一部分。因此,我需要将单词nike放在转义引号中,否则黄瓜会将单词nike周围的第一个引号识别为右引号。 (因为之前已有双引号)

我尝试了各种不同的转义字符,但似乎没有任何效果。例如,我尝试了以下内容:

\" – double quote
\\ – single backslash

有没有人遇到过类似的问题?如果有的话,你是怎么解决这个问题的?

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要更改正则表达式而不是字符串。

问题:您当前的正则表达式是"([^"]*)",它表示匹配非引号的引号之间的所有字符。考虑到您想要包含引用,这并不好。

解决方案:将步骤更改为以下内容:

Then /^I should see the following text: "(.*?)"$/ do |str|
  assert @browser.text.include?(str)
end

.*表示匹配引文之间的所有字符。 ?使搜索变得懒惰(而不是贪婪)。在这种情况下,?是可选的,但如果有其他参数被捕获则很重要。在http://www.regular-expressions.info/repeat.html可以看到贪婪与懒惰的一个很好的解释。