2016-03-08 8 views
2
членов

Привет StackOverflow,Watir-WebDriver продолжает открывать несколько браузеров

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

Я работаю над автоматизацией тестирования веб-сайтов. Текущий тестовый набор написан с помощью Cucumber/Ruby/Selenium-Webdriver/Capybara. Я лично заинтересован в переключении на Watir-Webdriver в сочетании с Cucumber и Ruby, но я борюсь со следующим:

Каждый раз, когда я запускаю свой тест на огурцы, Watir открывает не один, а два экрана браузера. Кажется, что вы хотите инициировать пустой экран (который просто переходит на сайт, который я настроил по умолчанию), плюс другой экран браузера, на котором выполняются фактические этапы тестирования.

Имейте в виду, я довольно новичок в этом, и у меня возникает эта проблема, когда вы просто следуете учебнику для начинающих. Пока ничего нет.

В моем файле 'Поддержка/env.rb', у меня есть следующие:

require "cucumber" 
require 'watir-webdriver' 

app_host = ENV['apphost'] 

Before do 
    @browser = Watir::Browser.start app_host, :firefox 
end 


Before do |scenario| 
    @scenario_tag = scenario.source_tag_names 
    @browser.cookies.clear 
end 

at_exit do 
    @browser.close 
end 

Первый бит в моем файле шагов (GoogleSearch.rb - да это, что основной):

require_relative "../support/env" 

Given(/^that I have gone to the Google page$/) do 
    @browser.goto 'http://www.google.com' 
end 

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

Опять же, я искал какое-то время (что обычно мне нравится), но я нигде не нашел ответа на мою проблему. Единственный способ заставить его работать, - это начать с шага в моем файле шагов, запустив браузер (вместо этого в файле env.rb). Но я не хочу начинать каждый тест с открытия браузера.

Любая помощь будет очень признательна. Если мне требуется больше информации от меня, я буду обновлять, как только смогу.

Заранее благодарен!

+1

Правильно ли представлен env.rb? Подозрительно, что у вас есть как «браузер», так и «браузер». –

+0

Привет, Джастин, спасибо за ваш ответ. Я обновил свой начальный пост с текущим содержимым env.rb. Я изменил «browser.close» на «@ browser.close» после того, как увидел ваш комментарий об использовании @browser и браузера. Тем не менее, я все еще получаю два экземпляра браузера при запуске одного сценария ... – cin

ответ

3

Проблема заключается в том, что env.rb загружается дважды:

  • Он автоматически включается при запуске cucumber команды
  • Он быть включен во второй раз в GoogleSearch.rb при вызове линии require_relative "../support/env".

В результате каждый крюк регистрируется дважды. Другими словами, Огурцы видит крючки для запуска перед каждым сценарием, как:

Before do 
    @browser = Watir::Browser.start app_host, :firefox 
end 

Before do |scenario| 
    @scenario_tag = scenario.source_tag_names 
    @browser.cookies.clear 
end 

Before do 
    @browser = Watir::Browser.start app_host, :firefox 
end 

Before do |scenario| 
    @scenario_tag = scenario.source_tag_names 
    @browser.cookies.clear 
end 

Как вы можете видеть, Watir::Browser.start вызывается дважды в результате двух браузеров. Первый не используется, поскольку второй вызов использует одну и ту же переменную.

Для решения проблемы просто удалите строку require_relative "../support/env".

Обратите внимание, что это касается только проблемы с открытием двух браузеров для каждого сценария. Вы заметите, что вы все равно получите новый браузер для каждого сценария, и только последний браузер будет закрыт. Если вам нужен только один браузер для всех сценариев, вы должны посмотреть на global hooks.

+0

Привет @Justin Ko, Еще раз спасибо за ваш ответ. Логика, стоящая за ней, казалась настолько очевидной и понятной, что я действительно надеялся, что это решит мою проблему ... Но это еще не так :(Я изменил файл env.rb, выполнив только действие «До» (@browser = Watir :: Browser.start ,: firefox) и полностью удаляет ссылку (require_relative для env.rb) из моего файла шагов ruby. Он по-прежнему открывает два браузера. – cin

+0

Я сделал одно, чтобы проверить, где это может пойти не так, в my env.rb hook Я добавил '@ browser.maximize', чтобы увидеть, в какой момент он будет максимизировать браузер. Затем я добавил '@ browser.bring_to_front' в свой файл GoogleSearch.rb. Только 2-й экран был максимально расширен и доведен до фронт, поэтому первый экран, похоже, в буквальном смысле избыточен. Но я не могу понять, откуда он пришел, и как открыть его ... Любые другие предложения? Ваша помощь очень ценится! – cin

+1

Можем ли мы проверить, сколько когда загружается 'env.rb'? Af ter 'require 'watir-webdriver'', вы можете добавить некоторый результат - например,' p' загрузить env.rb''? Когда вы запускаете Cucumber, сколько раз сообщение записывается? –

Смежные вопросы