Ожидание загрузки элемента с помощью 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:inmethod_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:inload_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:inrun_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 вызывают эту проблему. Было бы очень полезно, если бы кто-нибудь мог мне помочь.

0 ответов

Другие вопросы по тегам