12

私は物事を乾いた状態に保つのが好きです、それで私は私のステップの1つで以下を持ちたい理由です:

if first(:css, "#blabla") != nil
    find_by_id(blabla).click
end
find_by_id(....)
....

これは、特定の要素を検索し、存在する場合はそれをクリックすることを意味します。そうでなければ、私は時間を失うことはありません(私のデフォルトの待機時間は20秒です。これは、そこに置くfind 代わりに置く場合に使用されfirstます。

この場合、特定の要素をチェックするときに時間を無駄にしたくないというのが主な問題ですが、これが良いアプローチかどうかも疑問に思っています。

4

2 に答える 2

21

あなたのコードがブラウザに対して不必要な2番目のクエリを実行するという問題があります(あなたはすでにfirst(:css, "#blabla")そうする必要がないのでfind_by_id(blabla)

1つのクエリを使用して要素を見つけることをお勧めします。

el = first('#blabla')
el.click unless el.nil?

firstブロックしないので、ここで時間を失うことはないことに注意してください。

ただし、firstページに他の要素がないことを確認しません。:maximumあなたはそれをチェックするために追加することができます:

el = first('#blabla', maximum: 1)
el.click unless el.nil?
于 2013-03-21T21:01:25.323 に答える
0

要素の存在を決定するために使用している場合は#find、その呼び出しだけの待機時間を短縮する必要があります。

if page.has_css?('#blabla', wait: 0)
  # Do something
end

ただし、特別な場合には、同じ要素に対する複数の「検索」呼び出しを節約できるため、提案されたソリューションはさらに優れています。

于 2019-07-01T13:53:42.363 に答える