【问题标题】:Testing whether a html table element exists using ruby watir使用 ruby​​ watir 测试是否存在 html 表格元素
【发布时间】:2012-02-05 14:50:03
【问题描述】:

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

脚本正在测试两个 url:

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

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

第一个 url 显示一个没有 html 表格的网页,第二个显示一个包含 html 表格元素的网页。

我尝试将以下脚本放在一起,但我认为这是不正确的。我确信我在测试表格元素时犯了一个错误。

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 的新手 :-)。

非常感谢。

【问题讨论】:

    标签: ruby watir watir-webdriver


    【解决方案1】:

    有一个#exists? 方法。

    if browser.table.exists?
      # go on
    end
    

    【讨论】:

      【解决方案2】:

      翻转你的逻辑。

      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
      

      您可以按照自己的方式进行操作,但是 collect 方法非常脆弱 - 如果桌子或上面的任何东西每次移动,脚本就会失败。

      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
      

      【讨论】:

      • Watir 2+ 从 0 开始索引,因此第二个代码块中的注释不正确。
      • 谢谢,原意改了。
      • 如何遍历所有表?
      • 这在文档中。 browser.tables.each {|table|放表}
      猜你喜欢
      • 1970-01-01
      • 2013-01-12
      • 2013-11-11
      • 2011-12-20
      • 2011-12-04
      • 2012-09-01
      • 2021-03-04
      • 1970-01-01
      • 2018-06-17
      相关资源
      最近更新 更多