3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SeleniumDriver.WaitでごにょごにょしてElement以外が表示されるのを待ってみた

Last updated at Posted at 2019-06-19

ちょっとマニアックなことをしたのか、あまりドンピシャな記事を見つけられなかったのでメモしておく。

やろうとしたのは

  • switchToWindowで遷移するときにウィンドウが開くのを待つこと(あんまり意味ないような気もしてきたが)

(基本)待つには

  • inplicity Wait (暗黙) / Explicit Wait(明示) がある。
  • 今回は、Explicit Wait.

waitのサンプルを参考にためしてみる

https://qiita.com/t_y_cafe/items/5e1645e9221d3b1d0a4e より

$wait = Selenium::WebDriver::Wait.new(:timeout => 60)
$wait.until{driver.find_element(:id,'OK_btn').displayed?}
  • ElementじゃなくてWindowだけど同じ方法でできるのか? -> できなかった
    • wait.until{driver.switch_to_window}でリトライしてくれない(NoSuchWindowErrorが出てしまう、、、)

解決方法

  • irbでステップ実行していたときのログがヒントとなった。
    • waitメソッドにignored=[NoSuchElementError]が入っていて、見つからなかった場合にリトライ、みたいになってそう。
irb(main):080:0> wait = Selenium::WebDriver::Wait.new(:timeout => 1, :interval => 0.1)
wait.until {driver.switch_to.window(“new")}=> #<Selenium::WebDriver::Wait:0x00007f8041118258 @timeout=1, @interval=0.1, @message=nil, @ignored=[Selenium::WebDriver::Error::NoSuchElementError]>
  • APIドキュメントによると、:ignoreとして無視するErrorを設定できるらしい。
  • NoSuchWindowErrorを追加することで、ウィンドウが見つからなかったらリトライ、にする。
$wait = Selenium::WebDriver::Wait.new(:timeout => 60, :ignore => [Selenium::WebDriver::Error::NoSuchWindowError])
$wait.until{driver.switch_to.window(”new”).nil?}
  • 要素がみつからず時間だけがすぎた時には、Selenium::WebDriver::Error::TimeoutErrorが出るので囲ってキャッチしておくのを忘れない
  • なるほど便利。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?