2011-04-12 53 views
1

我正在尝试使用弹出窗口。我浏览了网站“http://wiki.openqa.org/display/WTR/JavaScript+Pop+Ups”。我通过添加网站解决方案#7中提到的代码修改了“ie-class.rb”。“调用的对象与客户端断开连接”时弹出窗口显示错误消息

另外我曾尝试下面的例子中提到的:

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没有执行任何操作,为什么显示错误消息。

请建议。

回答

2

看来你是用Watir使用ruby 1.9.2。 watir installation page建议使用Ruby 1.8.7。这应该解决问题。

祝你好运,

戴夫

+0

谢谢戴夫。 我想问的另一个问题是从Ruby 1.9.2迁移到1.8.7,我的测试 脚本会受到影响,因为我试图从最新版本降级到旧版本。 有没有这样做的程序或只是删除现有的1.9.2和 gem文件安装1.8.7就足够了。 请建议。 – ajazz 2011-04-12 17:53:09

+0

在另一个目录中安装1.8.7,安装watir gem,确保你的环境变量是最新的,然后运行你的脚本。有一些技术可以同时安装多个Ruby版本,您可以通过它们进行谷歌搜索。 – 2011-04-13 16:29:14

+0

嘿戴夫,在安装1.8.7和运行脚本后,我没有发现这个错误信息。谢谢。 – ajazz 2011-04-20 05:01:24

0

请注意,您有输出不是为了。您看到关闭浏览器时发生的错误,在Puts的输出之前。

不知道这是一个棘手的问题还是什么,但无论如何它从输出看起来像窗口试图关闭之前,依赖它的东西已经完成。也许尝试在关闭窗口之前插入短暂的睡眠一秒钟或五秒钟,然后查看是否仍有问题。

+0

我在关闭窗口前尝试了5秒钟的睡眠,并且脚本产生以下错误:> ruby​​ popup.rb C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.7.1/lib /的Watir /即级。rb:319:在'method_missing'中:未知属性或方法:'name'(NoMethodError) HRESULT错误代码:0x800706ba RPC服务器不可用。 \t from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.7.1/lib/watir/ie-class.rb:319:in'exists?' \t from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.7.1/lib/watir/ie-class.rb:406:在close中 \t from popup.rb:49 :在'

' 按下按钮! 您按下了OK! >退出代码:1 – ajazz 2011-04-14 07:03:57

+0

我只能说,它给你的文件名和行号..这些行是什么?代码在遇到问题时试图做什么? – 2011-04-14 22:28:44

0

挖入这一点。看来,Ruby 1.9抛出了“NoMethodError”而不是“WIN32OLERuntimeError”。该IE的Watir代码读取这样

 
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 

我不知道加入这样的调用的副作用,但它确实压制关闭警告。

相关问题