Как работать со страницей, которая не загружается и продолжает тестирование в Watir-Webdriver - PullRequest
1 голос
/ 03 марта 2012

Я искал ответ на другие вопросы, но не могу его найти.

Моя проблема заключается в том, что у меня есть ряд результатов, которые мне нужно проверить, но мой скрипт продолжает сбой, когда я нажимаю на URLэто не загружает страницу.Следующий URL не загружается.Когда этот URL не загружается, я хочу продолжить тестирование.

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

Я пытался использовать:

begin
  Timeout::timeout(30) do

    //enter part that is hanging
  end
end

Однако скрипт просто завершается.Ниже приведен полный скрипт, который я использую.Срок действия сценария истечет и он завершится ....

browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"

Любые идеи о том, как можно продолжить выполнение сценария (обойти проверку этого URL-адреса) и перейти к следующему?

require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "http://www.mycounciltax.org.uk/results?postcode=cv5+6bz&search=Search"
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


browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
if browser.table.exists?
  content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
  row = 1; column = 0
  content.each do |array|
    array.each do |element|
      worksheet.Cells(1,125).offset(row,column).value = element #.offset(row,column)
      column += 1
    end
    row += 1
    column = 0
  end
else
  content =0
end



browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"
if browser.table.exists?
  content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
  row = 1; column = 0
  content.each do |array|
    array.each do |element|
      worksheet.Cells(1,130).offset(row,column).value = element #.offset(row,column)
      column += 1
    end
   row += 1
   column = 0
  end
else
  content =0
end


browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
if browser.table.exists?
  content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
  row = 1; column = 0
  content.each do |array|
    array.each do |element|
      worksheet.Cells(1,135).offset(row,column).value = element #.offset(row,column)
      column += 1
    end
    row += 1
    column = 0
  end
else
  content =0
end

Обновление

Я хотел сказать, что хотел бы проверить, загружается ли каждый URL-адрес, прежде чем выполнять if else (который выводит таблицу в excel).Могу ли я сделать что-то вроде этого

require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "http://www.mycounciltax.org.uk/results?postcode=cv5+6bz&search=Search"
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

begin
  browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
  if browser.table.exists?
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
    row = 1; column = 0
    content.each do |array|
      array.each do |element|
        worksheet.Cells(1,125).offset(row,column).value = element #.offset(row,column)
        column += 1
      end
      row += 1
      column = 0
    end
  else
    content =0
  end
rescue => e
  puts "rescued #{e}"
end

begin
  browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"
    if browser.table.exists?
      content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
      row = 1; column = 0
      content.each do |array|
        array.each do |element|
          worksheet.Cells(1,130).offset(row,column).value = element #.offset(row,column)
          column += 1
        end
       row += 1
       column = 0
     end
  else
    content =0
  end
rescue => e
  puts "rescued #{e}"
end

begin   
  browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DP&search=Search"
  if browser.table.exists?
    content = browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
    row = 1; column = 0
    content.each do |array|
      array.each do |element|
        worksheet.Cells(1,135).offset(row,column).value = element #.offset(row,column)
        column += 1
      end
      row += 1
      column = 0
    end
  else
     content =0
  end
rescue => e
    puts "rescued #{e}"
end

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Этот вопрос вы задаете, и проблема такого рода, вероятно, указывает на гораздо более серьезную проблему в организации и запуске сценариев.

Первое предложение, которое у меня возникло бы в большинстве случаев, - это использоватьсуществующие тестовые рамки, тестовый / модульный огурец, пригодность и т. д. Все они предназначены для выполнения тестов в виде небольших атомарных элементов, которые сообщают о сбое, если что-то идет не так, а затем переходят к следующему тесту.(в отличие от большинства самодельных сценариев, которые очень часто представляют собой гигантские длинные последовательности, которые ломаются, если что-то идет не так, и не могут справиться с неожиданным отказом или каким-то циклом обработки, проходящим через файл, и при этом все еще имеют те же проблемы.Я не уверен, что это применимо к вам, поскольку вы, по-видимому, используете watir для очистки, а не для тестирования, насколько я могу судить.

Если вы катите свою собственную платформу, то это то, что вам нужно разработатьв систему. Это называется «обработкой исключений», а основной формат описан Желько в его ответе. Быстрый поиск в Google найдет несколько руководств по этому аспекту языка ruby.

Ваш отредактированный код, приведенный выше, ближе к этому, но выглядит для меня довольно повторяющимся (хотя, поскольку в настоящее время он показывает, что все флеширование осталось, это трудно понять. Поэтому я отредактировал его, чтобы добавить отступ, а это лучше ...) Я хотел бы рассмотреть превращение материала, который вы повторяете три раза, в метод, которыйпринимает URL-адрес и расположение электронной таблицы в качестве параметров, которые сокращают количество повторений.

Также может оказаться более полезным заключать в порядок только небольшое количество строк кода в начале / спасении / конце по порядку.сообщить более полезное сообщение о том, что не удалось.Это позволит вам сообщить что-то вроде «ошибка загрузки страницы # {url}», вы даже можете записать это в свою электронную таблицу.

Я бы рекомендовал немного прочитать о том, как ошибки могут «пузыриться» в системе, чтобы сбои могли быть немного более информативными.

1 голос
/ 03 марта 2012

Я не уверен, как бы вы протестировали страницу, которая не загружалась, но попробуйте что-то вроде этого:

begin
  browser.goto "http://www.mycounciltax.org.uk/results?postcode=WC1N1DF&search=Search"
rescue => e
  puts "rescued #{e}"
end
...