2

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

我有自动化测试设置。当我执行搜索时,我用来验证搜索是否返回正确结果的断言之一是检查页面中的文本。所以我的代码如下所示:

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

这里我传入要在字符串变量中搜索的文本。例如耐克、锐步等

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

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

除了 1 个问题外,这工作正常。我正在测试的 1 个网站已决定将搜索词放在双引号中,即 - “nike”的搜索结果

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

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

\" – double quote
\\ – single backslash

有没有人遇到过类似的问题,如果有,你是如何克服这个问题的?

谢谢!

4

1 回答 1

3

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

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

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

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

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

于 2012-07-13T11:21:35.920 回答