2012-02-05 25 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

相关问题