Проверка существования элемента таблицы html с использованием ruby ​​watir

Я хочу проверить, существует ли элемент таблицы? А если таблицы нет, то я просто хочу, чтобы скрипт закончился. Однако, если есть таблица, я хочу вывести ее в 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

Я планирую запустить приведенный выше код сразу. Может ли кто-нибудь указать, где я ошибаюсь? Я новичок в рубине и ватире :-).

Спасибо заранее.


person user1077250    schedule 05.02.2012    source источник


Ответы (2)


Есть метод #exists?.

if browser.table.exists?
  # go on
end
person p0deje    schedule 05.02.2012

Переверни свою логику.

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
person adam reed    schedule 05.02.2012
comment
Watir 2+ начинает индексацию с 0, поэтому комментарий во втором блоке кода неверен. - person p0deje; 06.02.2012
comment
Спасибо, изменено для первоначального намерения. - person adam reed; 06.02.2012
comment
как перебрать все таблицы? - person stack1; 24.06.2015
comment
Это в документах. browser.tables.each {|таблица| ставит стол } - person adam reed; 26.06.2015