3

watir-webdriver (0.6.4) gem を使用して Ruby (1.9.3) スクリプト (初めて) を作成しています。設定した間隔でサイトを開き、データを投稿してから、テキスト値がページに表示されるかどうかを確認するために使用しています。

ロード後にページに表示される「hello」という単語を単純に探している場合は、次のコマンドを使用できます。

Watir::Wait.until(timeout = 10) {b.text.include? 'hello'}

ただし、「こんにちは」または「さようなら」という単語を探しているので、機能的には次のようにします。

Watir::Wait.until(timeout = 10) {b.text.include? 'hello' or b.text.include? 'goodbye'}

しかし、どうやらそれは合法的な構文ではありません。私の現在の回避策は、最初の条件を試して (「hello」をチェック)、タイムアウト例外が発生したときに (「hello」が見つからないと仮定して)、2 番目の条件を試します (「さようなら」をチェックします)。非効率なようです(タイムアウトを待っています)。より良い方法はありますか?

4

3 に答える 3

4

後者よりも優先順位が高いため、||代わりに使用します。or

Watir::Wait.until(timeout = 10) { b.text.include?('hello') || b.text.include?('goodbye') }
于 2013-07-21T16:05:13.753 に答える
1

疑わしい場合は、括弧を追加してください。

ruby パーサーの仕組みの詳細はわかりませんが、その理由は理解できます

b.text.include? 'hello' or b.text.include? 'goodbye'

問題が発生します。次のようなものを試してください:

(b.text.include?('hello')) or (b.text.include?('goodbye')) 

または、より簡単な解決策として、正規表現を使用できます。

/hello|goodbye/ === b.text
于 2013-07-20T22:51:53.083 に答える
0

最初に b.text をキャッシュし、メソッド呼び出しで割り当てを避けることをお勧めします。

timeout = 10
Watir::Wait.until timeout do
  txt = b.text
  txt.include? 'hello' or txt.include? 'goodbye'
end

と の違いを覚えれば良いのですが||、今回の場合はor使ってもOKです。or

于 2013-07-21T18:03:07.940 に答える