2012-11-24 30 views
2
  • 紅寶石1.9.3p327
  • 的Watir-的webdriver 0.6.1

在新的Ruby安裝,用新鮮的webdriver的安裝,我無法使用等待或禮物?與不存在的元素不會導致非Watir超時錯誤。Watir-webdriver在詢問元素是否存在時超時?

在下面的例子中,ID「gb_32」是網頁,而是隱藏在。 Id'gb_50000'不存在。在這兩種情況下「存在」?應該返回false,但第二個在60秒後給我一個超時錯誤。 任何想法爲什麼會發生這種情況?

irb(main):014:0> b.link(:id,'gb_32').present? 
    => false 
    irb(main):015:0> b.link(:id,'gb_50000').present? 
    Timeout::Error: Timeout::Error 
      from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill' 
      from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill' 
      from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' 
      from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `catch' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1293:in `request' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1286:in `block in request' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:745:in `start' 
      from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1284:in `request' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:82:in `response_for' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:38:in `request' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:in `raw_execute' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in `execute' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:544:in `find_element_by' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/search_context.rb:42:in `find_element' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.1/lib/watir-webdriver/locators/element_locator.rb:247:in `by_id' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.1/lib/watir-webdriver/locators/element_locator.rb:26:in `locate' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.1/lib/watir-webdriver/elements/element.rb:384:in `locate' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.1/lib/watir-webdriver/elements/element.rb:362:in `assert_exists' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.1/lib/watir-webdriver/elements/element.rb:37:in `exists?' 
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.1/lib/watir-webdriver/elements/element.rb:296:in `present?' 
    from (irb):15 

謝謝。

+0

我現在通過在「現在?」中使用顯式超時設法組裝了一個kludge。和「直到」方法。像這樣: 'Timeout :: timeout(input_timeout = 1)do; #默認webdriver命令在這裏; 結束; 救援超時::錯誤; raise TimeoutError; 結束' – Virtuoso

+0

你能分享鏈接到頁面或相關的HTML嗎? –

+0

我認爲這取決於網絡驅動程序。我在看的頁面是「www.google.com」。當我嘗試尋找存在時,故障仍然出現在「about:blank」上?或存在?對於不存在的元素。 – Virtuoso

回答

4

我會將此添加爲評論,但顯然我還不能。你使用Firefox 17嗎? Watir-webdriver尚未與17兼容,因此如果您嘗試恢復到Firefox 16並查看您的代碼是否正常工作。我瞭解到,解決此兼容性問題的watir-webdriver更新將於下週發佈。

+0

感謝您的回覆。我已經完全重新安裝了Windows,似乎已經解決了這個問題。我相信這是筆記本電腦以前用戶的某種間諜軟件/惡意軟件的副作用。 – Virtuoso

+0

是的,那個特定的錯誤文本,並沒有說什麼,當它超時它試圖做什麼(就像等待一個元素),似乎是webdriver本身試圖與瀏覽器交談時的超時指示..問題是回到那裏。不是在你的代碼或網頁上..這是webdriver和瀏覽器之間的通信正在超時 –