【質問】WebDriverにHTMLの同期をとりたい

221 views
Skip to first unread message

yuzuru funakoshi

unread,
May 19, 2014, 4:06:18 AM5/19/14
to selen...@googlegroups.com
こんにちは。
 
RubyのアプリをChrome用のWebDriverに乗せて、Rspecのテストを実装しています。
 
FFのアドオンでは、WaitAndClickなどに当たり、Rspecソースに変換すると↓このように出力されますが、
!60.times{ break if (@driver.find_element(:id, 'aaa').displayed? rescue false); sleep 1 }
 
いかんせん、動作が不安定で、別ロジックを組もうと思っています。
↑も、find_element()も使いたくありません。
 
イメージとしては、このようにJSで要素の取得可否をし、取得できるまで延々周り、
同期を取っているのですが、いくら回っても要素を取得できない事があります。
 
  def js_click(ctrl_id)
    begin
      # 同期を取る(ID要素を捕まえるまで1秒間隔でループ)
      loop do
        element = @driver.execute_script("document.getElementById('" + ctrl_id + "');")
        unless element.blank?
          p element
          next
        end
        sleep(1)
      end
      # JSで実行(WEB DRIVERが使えない)
      @driver.execute_script("document.getElementById('" + ctrl_id + "').click();")
    rescue Exception => e
      p '@:' + e.message.to_s
    end
  end
 
そこで、WebDriverのHTML要素(現在表示されている画面のHTML)を再取得するコマンドを探しているのですが、ありますでしょうか?

伊藤望

unread,
May 20, 2014, 10:19:06 AM5/20/14
to selen...@googlegroups.com
こんばんは、伊藤です。

>同期を取っているのですが、いくら回っても要素を取得できない事があります。
うまく行く時といかない時があるということですかね。なんででしょうね。

@driver.execute_script("document.getElementById('" + ctrl_id + "');")
をloopで繰り返すよりは、
@driver.find_elements(elementでなくelements)の返り値の配列要素が空でないかのチェックを
loopで繰り返すなどの方が安定する気はするのですが。

>そこで、WebDriverのHTML要素(現在表示されている画面のHTML)を再取得するコマンドを探しているのですが、ありますでしょうか?

@driver.page_source
でページがロードされたときのHTML全体を取得できると思いますが、
その瞬間のリアルタイムのDOMを表してはいないと思うので、
デバッグ用に使いたいということでしたら不向きかもしれません。
Reply all
Reply to author
Forward
0 new messages