2012-07-13 129 views
2

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

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

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

这里我传入文本来搜索字符串变量。 e.g耐克,锐步等

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

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

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

因此,这会导致我的测试失败,因为我需要将引号作为搜索字词的一部分加入。因此,我需要将耐克这个单词放在引号内,否则黄瓜会将耐克这个单词的第一句引号作为结束语引用。 (因为在它之前已经有一个双引号)

我已经尝试了各种不同的转义字符,但似乎没有工作。例如,我曾尝试以下:

\" – double quote 
\\ – single backslash 

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

谢谢!

回答

3

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

问题:您当前的正则表达式说"([^"]*)",它说,以匹配不报价的报价之间的所有字符。考虑到你想包含引用,这不太好。

解决方案:更改步骤如下:

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

.*说来匹配报价之间的所有字符。 ?使搜索懒惰(而不是贪婪)。在这种情况下,?是可选的,但如果有附加参数被捕获,这将是重要的。在http://www.regular-expressions.info/repeat.html可以看到对贪婪vs懒惰的一个很好的解释。

+0

感谢百万贾斯汀!只是将正则表达式更改为您所说的,现在按预期工作。从来没有发生过我改变正则表达式。再次感谢! – user1523236 2012-07-13 11:58:53