要素がSelenium Webドライバに存在するかどうかを確認する方法はありますか?私はこのコードを使用しよう:要素が存在するかどうかを確認する
if @driver.find_element(:link, "Save").displayed? == true
をそれは私がまだスクリプトが実行を継続したいので、私は期待したものではありませんこれは、例外で中断します。
要素がSelenium Webドライバに存在するかどうかを確認する方法はありますか?私はこのコードを使用しよう:要素が存在するかどうかを確認する
if @driver.find_element(:link, "Save").displayed? == true
をそれは私がまだスクリプトが実行を継続したいので、私は期待したものではありませんこれは、例外で中断します。
@driver.find_element
はNoSuchElementException
と呼ばれる例外をスローします。
だから、catchブロックを試してみて、例外がある場合は例外と虚偽がない場合にtrueを返し使用する独自のメソッドを書くことができます。
は、それはあなたのソリューションを提供します、下のリンクに見てください。
私はRubyの専門家ではないし、いくつかの構文エラーを作ることができますが、一般的なアイデアを得ることができます。
if @driver.find_elements(:link, "Save").size() > 0
このコードはNoSuchElementException
をスローしません。しかし、この方法では、意志implicitlyWait
がゼロ以上で、ページに要素がない場合、しばらくの間「ハング」します。 2番目の問題 - if要素がページ上に存在するが、表示されない場合は、true
と表示されます。要素が関係なく、私はそれが役に立つというbegin/rescue
を使用するよりも、element.displayed?
でselenium wait objectを使用するために何を見つけるのページにあってはならないことが予想されます場合は
def is_element_present(how, what)
@driver.manage.timeouts.implicit_wait = 0
result = @driver.find_elements(how, what).size() > 0
if result
result = @driver.find_element(how, what).displayed?
end
@driver.manage.timeouts.implicit_wait = 30
return result
end
提案していただきありがとうございます。私はメソッド "ハング"をもう待つ必要はありません – Thanh
なぜimplicit_waitが必要ですか?ページ全体が読み込まれた後に要素が存在することを確認するので、それを持たないほうがいいですか?それとも、私はこれを理解するのに間違っていますか?助けて! –
:
メソッドを作成しようと回避策
wait = Selenium::WebDriver::Wait.new(:timeout => 15)
element = $driver.find_element(id: 'foo')
wait.until { element.displayed? } ## Or `.enabled?` etc.
これは、ページの一部が適切に他のものよりもレンダリングに時間がかかるの場合に有用です。
おかげで、私は「救助」を使用し、それは、あなたが答えを受け入れるべき助けit..If聞くために、この問題 – Thanh
GR8を解決しました。 –
私は今、あなたの答えを受け入れるが、私はあなたにこの時間を借りてみましょうするのに十分な評判(最小15)を持っていない、私は後であなたの答えを受け入れる:) – Thanh