使用ruby watir测试是否存在html表元素

时间:2012-02-05 14:50:04

标签: ruby watir watir-webdriver

我想测试的是表元素是否存在?如果没有表格,那么我只想让脚本结束。但是如果有一个表我想将它输出到excel。

该脚本正在测试两个网址:

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

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

第一个网址提供一个没有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的新手: - )。

非常感谢提前。

2 个答案:

答案 0 :(得分:5)

有一种#exists?方法。

if browser.table.exists?
  # go on
end

答案 1 :(得分: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