2012-02-05 24 views
2

我想測試的是表格元素是否存在?如果沒有表格,我只想讓腳本結束。但是,如果有一個表我想輸出到Excel。測試一個html表格元素是否存在使用ruby watir

該腳本測試兩個網址:

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

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

第一URL中提出了一個網頁,而無需HTML表格和第二呈現一個網頁,包括HTML表格元素。

我曾嘗試將以下腳本放在一起,但我不認爲這是正確的。我確信我在測試table元素時犯了一個錯誤。

if browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}.exists? 
then content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]} 

如果你從下面的腳本刪除上面的代碼將運行,但會翻倒,當它沒有找到HTML表格。

require "watir-webdriver" 
browser = Watir::Browser.new :ff 
browser.goto "http://www.mycounciltax.org.uk/results?postcode=CV56BZ&search=Search" 

if browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}.exists? 
then 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 

else end 

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

if browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}.exists? 
then 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 

else end 

我打算一次運行上面的代碼。任何人都可以指出我要去哪裏嗎?我是ruby和watir的新手:-)。

非常感謝提前。

回答

5

有一個#exists?方法。

if browser.table.exists? 
    # go on 
end 
+0

這是我用過的解決方案。非常感謝。 – user1077250 2012-02-06 14:10:22

0

翻轉你的邏輯。

if browser.text.include? ("Sorry. We couldn't find any properties for the postcode") 
    puts "no table here" 
    #quit/close/move on to next test/etc 
else 
    #do some stuff 
end 

你可以做你的方式,但會收集方法是一個非常脆弱的 - 如果表或任何在它上面每一個動作,該腳本將失敗。

search_result = browser.table(:index, 0) #or :index, 1 for WATIR 1.X 

if search_result.exists? 
    #do some stuff 
else 
    puts "table not found" 
end 
+1

Watir 2+以0開始索引,因此第二個代碼塊中的註釋不正確。 – p0deje 2012-02-06 04:21:35

+0

謝謝,因初衷而更改。 – 2012-02-06 05:37:38

+0

@adamreed - 這是一個偉大的,謝謝你的建議。 – user1077250 2012-02-06 14:08:59

相關問題