2

Cucumber/Watir のエスケープ文字で私が抱えている問題について、誰かが私を助けてくれることを望んでいました。

テストのセットアップを自動化しました。検索を実行するとき、検索が正しい結果を返したことを確認するために使用するアサーションの 1 つは、ページのテキストをチェックすることです。したがって、私のコードは次のようになります。

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 に答える