等待使用watir加载元素

时间:2014-01-28 07:14:07

标签: ruby watir ruby-1.9.3

我刚刚从1.8迁移到ruby 1.9.3 ..而不是使用wait方法,我有一个自己的方法,用于检查要加载的元素,它曾经在1.8.7上完美地工作。但是在我升级到ruby 1.9.3后,该方法随机失败,但有以下异常。

  

未知属性或方法:parentelement' HRESULT error code:0x80070005 Access is denied. C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-2.0.4/lib/watir/element.rb:168:in method_missing'       C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-2.0.4/lib/watir/element.rb:168:在parent' D:/Ruby_193/Watir/script/script1.rb:78:in块(test_script1中的2个级别)中       D:/Ruby_193/Watir/lib/helper.rb:494:在call' D:/Ruby_193/Watir/lib/helper.rb:494:in load_finished'中       D:/Ruby_193/Watir/lib/helper.rb:488:在test_script1中的wait_for_pageload' D:/Ruby_193/Watir/script/script1.rb:78:in块中'       D:/Ruby_193/Watir/lib/helper.rb:526:在call' D:/Ruby_193/Watir/lib/helper.rb:526:in run_step'中       D:/Ruby_193/Watir/script/script1.rb:71:在`test_script1'

第no行的代码。我的script1.rb中的78是

77: browser.button(:value, "Generate").click
78: wait_for_pageload( lambda {browser.cell(:text,"Coversheet").parent.link(:text,"template").exists? })

调用helper.rb文件中的wait_for_pageload方法

482:def wait_for_pageload(page_lambda = nil, &page_closure)
483:  script = "window.frames.frame::1.document.enabled"
484:  page_lambda = page_closure if block_given?
485:  count = 0
486:  load_limit = 1200
487:  sleep_time = 0.1
488:  sleep sleep_time until load_finished(script, page_lambda) || (count +=1) > load_limit
489:  raise "Unable to load page in over #{load_limit} tries (#{sleep_time * load_limit} seconds)" if count > load_limit
490:end

wait_for_pageload方法又调用load_finished方法并将javascript变量和page_lambda传递给方法

493:def load_finished(script, page_lambda)
494:  page_lambda.nil? ? browser.execute_script(script).to_s == "true" : page_lambda.call()
495:end
private :load_finished

抱歉,我无法提供该网站或html的链接。

当我点击Generate按钮(第77行)时,页面会刷新,并显示模板链接。显示模板链接所需的时间每次都不同。所以我在wait_for_pageload的帮助下检查链接是否显示。

但是当我运行以下代码生成链接后,它返回true。

browser.cell(:text,"Coversheet").parent.link(:text,"template").exists?

所以我确信这部分不是错误。我做了一点研究,发现在1.9.3中proc和lambda有变化,我猜这个问题发生在第一行。 494 page_lambda.nil? ? browser.execute_script(script).to_s == "true" : page_lambda.call()

我对1.9.3中的哪些更改导致此问题一无所知。如果有人能帮助我,那将是非常有帮助的。

0 个答案:

没有答案