Сообщение об ошибке «вызванный объект отключен от клиентов» при работе с всплывающими окнами - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь работать с всплывающими окнами. Я прошел сайт "http://wiki.openqa.org/display/WTR/JavaScript+Pop+Ups". Я изменил" ie-class.rb ", добавив код, упомянутый в решении № 7 сайта.

Также я попробовал пример, упомянутый ниже:

require 'watir/ie'
require 'win32ole'


iewin = Watir::IE.new
iewin.goto("http://www.w3schools.com/js/tryit_view.asp?filename=tryjs_confirm")
iewin=Watir::IE.attach(:url, /w3schools/)
iewin.bring_to_front
iewin.maximize
iewin.button(:value, "Show a confirm box").click_no_wait
txt = iewin.clickprompt("OK") # waits for popup and click ok
puts txt #prints the popup text
txt1=iewin.clickprompt("OK")
puts txt1

iewin.close

При выполнении следующего кода всплывающие окна обрабатываются, но выдает следующую ошибку:

C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.7.1/lib/watir/ie-class.rb:319:in `method_missing': unknown property or method: `name' (NoMethodError)
    HRESULT error code:0x80010108
      The object invoked has disconnected from its clients.
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.7.1/lib/watir/ie-class.rb:319:in `exists?'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.7.1/lib/watir/ie-class.rb:406:in `close'
    from popup.rb:50:in `<main>'
Press a button!
You pressed OK!

Но когда я удаляю команду «iewin.close», сообщение об ошибке не отображается.

Команда "iewin.close" закрывает браузер, и тогда watir ничего не может выполнить, тогда почему отображается сообщение об ошибке.

Пожалуйста, предложите.

Ответы [ 3 ]

2 голосов
/ 12 апреля 2011

Похоже, что вы используете ruby ​​1.9.2 с Watir.На странице установки watir рекомендуется использовать Ruby 1.8.7.Это должно решить проблему.

Удачи,

Дэйв

0 голосов
/ 25 июля 2011

Вкопался в это немного. Похоже, что Ruby 1.9 выдает «NoMethodError» вместо «WIN32OLERuntimeError». Код Watir IE читается как таковой

def exists?
  begin
    !!(@ie.name =~ /Internet Explorer/)
  rescue WIN32OLERuntimeError
    false
  end
end

Чтобы исправить это, к вызову может быть добавлено второе спасение

def exists?
  begin
    !!(@ie.name =~ /Internet Explorer/)
  rescue WIN32OLERuntimeError
    false
  rescue NoMethodError
    false
  end
end

Я не знаю побочных эффектов добавления такого вызова, но он подавляет предупреждение о закрытии.

0 голосов
/ 13 апреля 2011

Обратите внимание, что ваш вывод не в порядке. Вы видите ошибку при закрытии браузера, ДО вывода из ваших Puts.

Не уверен, что это проблема протектора или что, но в любом случае из вывода видно, что окно пытается закрыть до того, как материал, зависящий от него, завершит работу. Возможно, попробуйте вставить краткий сон на секунду или пять прямо перед тем, как попытаться закрыть окно и посмотреть, не возникли ли у вас проблемы.

...