2011-12-12 75 views
0

我一直在尋找在維基的Watir Watir File Uploads處理一個彈出產生的,而一個文件上傳框填充

環境的文件上傳部分我使用的:

  • 紅寶石:1.8.7
  • 的Watir:1.8.1

我的代碼看起來是這樣的:

ie = Watir::Browser.start("tinypic.com") 
ie.file_field(:id, "the_file").set("C:\\image.png") 

現在,當將文件「image.png」不存在時,它產生一個彈出如下所示 Error Popup

我試圖用存在於在維基Javacript彈出部彈出-處理程序,但在調試之後,我發現set方法不會返回,除非處理彈出窗口。

什麼是處理它的好方法?在Google上搜索時,我發現某處可以在Ruby中啓動不同的進程,並嘗試關閉彈出窗口。如果是這樣的話,我可以得到一些示例代碼或指導方針,以瞭解如何進行上述操作?

感謝您的任何幫助。

+0

您正在使用的Watir或的Watir-的webdriver?你標記了兩個,但沒有指定你在問題中使用的是哪一個。這很重要,因爲他們有不同的設備來處理彈出窗口。 –

+0

我正在使用watir,只是在問題中添加了信息 – chaitanya

+0

你爲什麼試圖上傳不存在的文件? –

回答

0

我對這個問題也很感興趣,而且我有一些信息......我正在使用watir-webdriver,但我認爲我們可能在這裏遇到同樣的問題。

在watir-webdriver中,我可以通過使用AlertHelper擴展或手動覆蓋javascript函數來處理大多數彈出窗口。這兩種技術在http://watirwebdriver.com/javascript-dialogs/中有描述......而且「手動控制」(頁面上的下一頁)當然也適用於IE Watir。

你會加入這一行:ie.execute_script( 「window.alert =函數(){}」)

立即您前行:ie.file_field(:身份證, 「the_file」)集(。 「C:\ image.png」)

這可能適合你。

但是,如果警報或對話框是由AJAX和PHP動態生成的,則這些技術不起作用。我一直在尋找一種解決方案,以便如何與動態加載的JavaScript警報進行交互,這些警報在PHP將它們發送到頁面時被調用。在https://github.com/jarib/watir-webdriver/issues/103的討論使我相信,selenium-webdriver可以通過使用alert_box.text和alert_box.dismiss方法做到這一點,但watir-webdriver API尚未充分利用這一點,據我所知。

感謝任何人可以提出更徹底的解決方案,以便如何處理watir和watir-webdriver動態生成的警報。

凱文

+0

我認爲Webdriver確實會這樣做,或者至少是類似的東西。請參閱此答案(http://stackoverflow.com/a/8172888/409820),其中描述了watir-webdriver用於處理javascript對話框的方法。 –

0

感謝您的輸入凱文,

其實我這個答案[我調整了它從的Watir維基方法1]提出了現金喬治上的Watir一般以下post。我寫了一個彈出的處理程序是這樣的:

require 'win32ole' 
title = "Choose File to Upload" 

     begin 
     popupOccurred = false 
     autoIt = WIN32OLE.new('AutoItX3.Control') 
     timeout = 15 
     autoIt.WinWait(title, '', timeout) 
     autoIt.ControlClick(title, "", "&Open") 
     sleep 1 
     autoIt.WinWait(title, '', timeout) 
     isClicked = autoIt.ControlClick(title, "", "OK") 
     sleep 1 
     autoIt.ControlClick(title, "", "Cancel") if (isClicked == 1) 
     autoIt.ole_free 
     rescue 
     puts "Error closing popup, please close Manually" 
     end 

,並在我的代碼片段,我做了以下內容:

require 'watir' 

b = Watir::Browser.start("tinypic.com") 
#-- Launches the popup closer in a different process. other methods like 
#-- Process.create or system(start rubyw C:\\popup_handler2.rb) or having the 
#-- popup handler in a Thread did not work for me. 
system("start ruby C:\\popup_handler2.rb") 
b.file_field(:id, "the_file").set("C:\\image.png") 

我肯定會從的Watir大師/開發者/用戶欣賞一些反饋在那裏。

感謝,

切塔尼亞