Восстановление из неотвечающего состояния, когда Watir :: Browser обнаруживает URL с бесконечным циклом - PullRequest
0 голосов
/ 28 мая 2018

У меня есть требование, при котором я должен тестировать веб-сайты, которые могут иметь бесконечный цикл, следовательно, если встречается веб-сайт с бесконечным циклом, то мое приложение должно пропустить и протестировать следующий веб-сайт в списке.

PSЯ написал свои собственные тестовые URL в html и JS (с бесконечным циклом), чтобы проверить это.

Однако, когда Watir :: Browser URL достигает URL бесконечного цикла, я получаю Net :: ReadTimeout: Net ::Исключение ReadTimeout, которое я ловлю, а затем пытаюсь перейти к следующему URL-адресу browser.goto.Но отныне каждая попытка приводит к одному и тому же исключению.Даже браузер. Существует?или browser.close дает такое же исключение.Невозможно выполнить какие-либо операции с объектом браузера.

Есть какие-либо подсказки относительно того, как я могу восстановить свой браузер, чтобы я мог заставить Watir :: browser перейти на следующий URL?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Я бы рассмотрел что-то вроде:

require 'watir'

some_array_of_urls.each do |url|
  begin
    browser.goto url
    # ...
  rescue Net::ReadTimeout
    log_error
    @browser = nil
    next
  end
end

def browser
  @browser ||= Watir::Browser.new
  @browser
end
0 голосов
/ 28 мая 2018

A Net::ReadTimeout означает, что драйвер ушел, чтобы выполнить то, что вы сказали, а код Ruby решил, что он не вернется.Даже если вы спасете исключение, вы не сможете дать драйверу другую инструкцию, потому что он по-прежнему работает с запросом, который, как вы знаете, не может быть выполнен.

Watir / Selenium не является подходящим инструментом для проверки, еслисайт будет иметь бесконечный цикл.Я бы порекомендовал использовать HTTP-библиотеку, чтобы убедиться, что страница загружается, прежде чем пытаться получить к ней доступ с помощью Watir.

В качестве альтернативы, вы можете создать и закрыть другой сеанс (Watir убьет процесс для вас на browser.close) за каждый вызов потенциально зацикленного сайта.

...