2012-03-02 22 views
1

我在其他問題上尋找答案,但找不到一個。如何處理無法加載並在Watir-Webdriver中繼續測試的頁面

我的問題是,我有一些結果需要測試,但是當我點擊一個不加載頁面的Url時,我的腳本仍然失敗。以下Url不加載。當這個Url不加載時,我想繼續我的測試。

http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search

我曾嘗試使用:

begin 
    Timeout::timeout(30) do 

    //enter part that is hanging 
    end 
end 

但是劇本剛剛退出。以下是我正在使用的完整腳本。該腳本將超時,然後退出....

browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search" 

如何讓腳本繼續(旁路此URL的測試),並進入下一個任何想法?

require "watir-webdriver" 
browser = Watir::Browser.new :ff 
browser.goto "http://www.mycounciltax.org.uk/results?postcode=cv5+6bz&search=Search" 
content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
require 'win32ole' 

application = WIN32OLE.new('Excel.Application') 
application.visible = TRUE 
workbook = application.Workbooks.Add(); 
worksheet = workbook.Worksheets(1); 
worksheet.visible 

row = 1; column = 0 
content.each do |array| 
    array.each do |element| 
    worksheet.Cells(1,1).offset(row,column).value = element #.offset(row,column) 
    column += 1 
    end 
    row += 1 
    column = 0 
end 


browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search" 
if browser.table.exists? 
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
    row = 1; column = 0 
    content.each do |array| 
    array.each do |element| 
     worksheet.Cells(1,125).offset(row,column).value = element #.offset(row,column) 
     column += 1 
    end 
    row += 1 
    column = 0 
    end 
else 
    content =0 
end 



browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search" 
if browser.table.exists? 
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
    row = 1; column = 0 
    content.each do |array| 
    array.each do |element| 
     worksheet.Cells(1,130).offset(row,column).value = element #.offset(row,column) 
     column += 1 
    end 
    row += 1 
    column = 0 
    end 
else 
    content =0 
end 


browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search" 
if browser.table.exists? 
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
    row = 1; column = 0 
    content.each do |array| 
    array.each do |element| 
     worksheet.Cells(1,135).offset(row,column).value = element #.offset(row,column) 
     column += 1 
    end 
    row += 1 
    column = 0 
    end 
else 
    content =0 
end 

更新

我的意思是說,我想執行的if else(該表輸出到Excel)之前測試每個URL負載是否。我可以做沿着這

require "watir-webdriver" 
browser = Watir::Browser.new :ff 
browser.goto "http://www.mycounciltax.org.uk/results?postcode=cv5+6bz&search=Search" 
content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
require 'win32ole' 

application = WIN32OLE.new('Excel.Application') 
application.visible = TRUE 
workbook = application.Workbooks.Add(); 
worksheet = workbook.Worksheets(1); 
worksheet.visible 

row = 1; column = 0 
content.each do |array| 
    array.each do |element| 
    worksheet.Cells(1,1).offset(row,column).value = element #.offset(row,column) 
    column += 1 
    end 
    row += 1 
    column = 0 
end 

begin 
    browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search" 
    if browser.table.exists? 
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
    row = 1; column = 0 
    content.each do |array| 
     array.each do |element| 
     worksheet.Cells(1,125).offset(row,column).value = element #.offset(row,column) 
     column += 1 
     end 
     row += 1 
     column = 0 
    end 
    else 
    content =0 
    end 
rescue => e 
    puts "rescued #{e}" 
end 

begin 
    browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search" 
    if browser.table.exists? 
     content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
     row = 1; column = 0 
     content.each do |array| 
     array.each do |element| 
      worksheet.Cells(1,130).offset(row,column).value = element #.offset(row,column) 
      column += 1 
     end 
     row += 1 
     column = 0 
    end 
    else 
    content =0 
    end 
rescue => e 
    puts "rescued #{e}" 
end 

begin 
    browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search" 
    if browser.table.exists? 
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 
    row = 1; column = 0 
    content.each do |array| 
     array.each do |element| 
     worksheet.Cells(1,135).offset(row,column).value = element #.offset(row,column) 
     column += 1 
     end 
     row += 1 
     column = 0 
    end 
    else 
    content =0 
    end 
rescue => e 
    puts "rescued #{e}" 
end 

回答

1

我不知道你會如何測試沒有加載頁面線的東西,但嘗試這樣的事:

begin 
    browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search" 
rescue => e 
    puts "rescued #{e}" 
end 
+0

謝謝你的回答。 這並不完全是我所追求的...我想將它集成到腳本中,以便如果它返回超時錯誤(因爲URL不起作用),腳本將繼續。 – user1077250 2012-03-02 22:36:01

+0

謝謝你的回答。 這並不完全是我所追求的...我想將它集成到腳本中,以便如果它返回超時錯誤(因爲URL不起作用),腳本將繼續。 我希望圍繞每一塊代碼開始和拯救,以便在執行If If並將結果輸出到Excel表單之前測試url是否工作/加載。 – user1077250 2012-03-02 22:41:53

+0

我已經更新了這些問題,以更詳細地解釋我上面所做的評論。 – user1077250 2012-03-02 22:49:02

3

這個問題你問,而這種問題可能會指出你在組織和運行腳本方面的一個更大的問題。

我在大多數情況下的第一個建議是使用現有的測試框架,測試/單元黃瓜,健身等等。所有這些都被設計爲運行測試作爲小的原子項目,如果出現任何錯誤然後轉到下一個測試。 (與大多數自制腳本相反,這些腳本經常是一個巨大的長序列,當一些事情發生錯誤,無法應對任何意想不到的失敗或者某種處理循環遍歷文件,並且仍然存在相同類型的問題時,我不知道這是否適用於你,因爲你似乎正在使用watir進行測試,儘可能多地測試。

如果你在滾動你自己的框架,那麼這是你需要設計的東西系統,這就是所謂的'異常處理',基本格式如Zeljko在他的回答中所描述的那樣,A quick google search會在你的ruby語言的這方面找到多個教程。看起來很重複我。 (雖然它現在顯示爲全部齊平,所以我很難理解它,所以我編輯它以添加縮進,這樣更好......)我會考慮將你重複三次的東西轉換爲一個接受URL的方法和電子表格的位置作爲參數,可以減少重複。

此外,您可能會發現在開始/救援/結束時只包裹少量的代碼行以便報告關於失敗的更有用的消息更有用。這將允許您報告「錯誤加載頁面{{}}」,您甚至可以將其寫入電子表格。

我建議稍微閱讀一下關於錯誤如何通過系統「冒泡」的方法,以便失敗可以提供更多的信息。

+1

查克的答案+1。我可以理解構建一個巨型框架來學習更多關於框架的知識,但我不會創建一個框架。他對每次測試測試一件事的良好做法也是正確的。我不知道所有這些內容= 0的東西是什麼,但它看起來像你試圖弄清楚其中有多少是正確的。只需使用testunit,rspec或黃瓜測試每個人,然後您的指標就會浮到頂端。考慮這個問題的另一種方法是:你的核心能力是什麼,構建測試框架或設計測試? – 2012-03-03 07:44:52

+1

謝謝你的回答。我開始瞭解框架 - 我理解你的觀點。 – user1077250 2012-04-04 12:17:56