Я использую рубиновый камень watir-webdriver. Он запускает браузер (Chrome) и начинает загружать страницу. Страница загружается слишком медленно, и watir-webdriver вызывает ошибку таймаута. Как заставить браузер перестать загружать страницу?Сделать загрузку без браузера на страницу загрузки
require 'watir-webdriver'
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 10
@browser = Watir::Browser.new :chrome, :http_client => client
sites = [
"http://google.com/",
"http://yahoo.com/",
"http://www.nst.com.my/", # => This is the SLOW site
"http://drupal.org/",
"http://www.msn.com/",
"http://stackoverflow.com/"
]
sites.each do |url|
begin
@browser.goto(url)
puts "Success #{url}"
rescue
puts "Timeout #{url}"
end
end
########## Execution result ##########
# Success http://google.com/
# Success http://yahoo.com/
# Timeout http://www.nst.com.my/
# Timeout http://drupal.org/
# Timeout http://www.msn.com/
# Timeout http://stackoverflow.com/
########## Expected result ##########
# Success http://google.com/
# Success http://yahoo.com/
# Timeout http://www.nst.com.my/
# Success http://drupal.org/
# Success http://www.msn.com/
# Success http://stackoverflow.com/
Похоже, браузер не отвечает ни на какие другие команды, прежде чем он завершит загрузку страницы. Как заставить браузер удалять загружаемую страницу и выполнять следующую команду?
ОБНОВЛЕНО
Я нашел интересный возможность флаг loadAsync http://src.chromium.org/svn/trunk/src/chrome/test/webdriver/webdriver_capabilities_parser.cc Может быть, это может быть полезно для решения этой проблемы? Я еще не понимаю, как заставить watir (webdriver) установить это при запуске хромированного ребра. Этот флаг был введен здесь http://codereview.chromium.org/7582005/
На вершине моей головы есть только одно объяснение этой вещи. Ватир однопоточный. –
Я не пытаюсь использовать его в нескольких потоках.Мне просто интересно, почему после одной команды и ее таймаута невозможно выполнить следующую команду. – Molfar
Когда я говорю однопоточное, я имею в виду, что при отправке комманда webdriver для выполнения чего-то вы синхронный вызов и ничего не можете сделать, пока не получите ответ от webdriver. Так что вещь, которую вы хотите сделать в этом сценарии, не может быть выполнена, пока вы не измените синхронный вызов на асинхронный. –