Ожидание загрузки элемента с помощью watir
Я только что перешел на ruby 1.9.3 с 1.8. Вместо использования методов ожидания у меня был собственный метод, который использовался для проверки загружаемого элемента, и он прекрасно работал на 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
блок (2 уровня) в test_script1' 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: вwait_for_pageload' D:/Ruby_193/Watir/script/script1.rb:78:in
блок в test_script1' 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'
Код в строке № 78 в моем script1.rb
77: browser.button(:value, "Generate").click
78: wait_for_pageload( lambda {browser.cell(:text,"Coversheet").parent.link(:text,"template").exists? })
который вызывает метод wait_for_pageload в файле helper.rb
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.
Что происходит, когда я нажимаю кнопку "Создать" (строка № 77), страница обновляется и отображается ссылка на шаблон. Время, необходимое для отображения ссылки на шаблон, меняется каждый раз. Поэтому я проверяю, отображается ли ссылка с помощью wait_for_pageload.
Но после того, как ссылка сгенерирована, когда я запускаю приведенный ниже код, она возвращает true.
browser.cell(:text,"Coversheet").parent.link(:text,"template").exists?
Так что я уверен, что это не ошибка с этой частью. Я провел небольшое исследование и обнаружил, что в proc и lambda произошли изменения в 1.9.3, и я думаю, что проблема возникает в строке №. 494 page_lambda.nil? ? browser.execute_script(script).to_s == "true" : page_lambda.call()
Я не знаю, какие изменения в 1.9.3 вызывают эту проблему. Было бы очень полезно, если бы кто-нибудь мог мне помочь.