2011-04-12 62 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 

我不知道加入這樣的調用的副作用,但它確實壓制關閉警告。

相關問題