Проверка существования элемента таблицы html с использованием ruby ​​watir - PullRequest
2 голосов
/ 05 февраля 2012

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

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

Большое спасибо заранее.

Ответы [ 2 ]

5 голосов
/ 05 февраля 2012

Существует метод #exists?.

if browser.table.exists?
  # go on
end
0 голосов
/ 05 февраля 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
...