Selenide не закрывать браузер
Selenium WebDriver - отличный инструмент. Но это не инструмент для тестирования. Это инструмент для управления браузером.
А Selenide - удобный инструмент для автоматических тестов, построенный на базе Selenium WebDriver.
Почему понадобился ещё один враппер для Selenium?
Да, есть и другие “обёртки” для Selenium webdriver. Но нам кажется, что все они не решают главные проблемы UI тестов. А именно, нестабильность тестов, веб-приложения с динамическим контентом, JavaScript, Ajax, таймауты и т.д. Selenide был создан для решения этих проблем.
А ещё Selenide очень простой для изучения. С ним каждый может начать писать автоматические тесты буквально за 5 минут, даже те, кто не имеет никакого опыта в тестировании. И даже разработчики!
Какие преимущества даёт Selenide по сравнению с голым Selenium WebDriver?
Прежде всего, Selenide помогает вам делать стабильные тесты, решая (почти) все проблемы с таймаутами и аяксом.
Selenide предлагает лаконичный API для использования Selenium WebDriver в UI тестах:
- Умные ожидания
- Автоматическое управление браузером (открытие, закрытие - вам больше не придётся об этом думать)
- Удобные методы
- Поддержка Ajax
- Автоматические скриншоты
Автоматическое управление браузером
Вам больше не надо явно открывать браузер и думать о том, где его хранить и когда закрывать. Selenide сам откроет браузер, когда он впервые понадобится, и закроет, когда он больше не будет нужен.
Удобные методы
Selenide предлагает лаконичный и мощный API, который поможет вам писать короткие и хорошо читаемые тесты. Selenide есть масса удобных методов для заполнения полей, выбора чекбоксов, выпадающих списков, поиска элементов по тексту и т.д.
Поддержка Ajax
При тестировании современных динамичных приложений, полных аякса и яваскрипта, нам часто нужно подождать, пока изменится состояние какого-либо элемента. Selenide делает это из коробки. Автоматически. Вам даже не нужно задумываться о том, требуется ли ожидание в том или ином месте.
Все нижеследующие методы могут немножко подождать, если условие не выполнено сразу (по умолчанию до 4 секунд):
Автоматические скриншоты
Когда тест падает, Selenide автоматически делает скриншот. Вам ничего не нужно для этого делать.
Больше преимуществ!
Это лишь краткий обзор. В этом видео можно узнать узнать больше о преимуществах Selenide:
Для переключения между окнами браузера в Selenium WebDriver используется метод switchTo , также как и при работе с алертами или фреймами. Только для окон нет родительского окна, в которое можно было бы переключиться по умолчанию. Для переключения всегда используется дескриптор окна, поэтому для того, чтобы переключиться в первоначально открытое окно, нужно сначала запомнить его дескриптор.
Для получения дескриптора окна используется метод getWindowHandle() . Он возвращает дескриптор текущего открытого окна, который уникально идентифицирует окно для этого экземпляра драйвера.
Метод getWindowHandles() возвращает набор дескрипторов окон, которые можно использовать для перебора всех открытых окон для данного экземпляра webdriver .
Поэтому если вы не знаете имя нового открытого окна, его можно получить следующим способом:
Иногда открытие новых окон происходит не сразу. Для того, чтобы дождаться открытия окна достаточно перенести описанную выше логику в WebDriverWait:
Про корректное закрытие окон можно почитать в этой статье.
Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/u0420283/data/www/internetka.in.ua/wp-includes/class-wp-comment-query.php on line 405
4 комментариев
Видел такой же пример только где два сета соединяются методом removeAll при котором удаляются все совпадающие элементы и остаются только те, которые разные, в итоге имеем только новое окно в сете.
В любом случае спасибо!
Кстати, способ дождаться какого-либо элемента я бы вывел в отдельную статью.
Во-первых это не очевидный способ для новичков, во-вторых достаточно большая конструкция получается чтобы просто запомнить.
Добрый день. Очень обрадовался тому, что нашел вашу статью, но пока не могу понять причину ошибки компиляции.
Компилятор ругается что не находит реализацию функции apply(f), хотя я просто скопировал код из статьи.
String newWindow = (new WebDriverWait(driver, 10))
.until(new ExpectedCondition() public String apply(WebDriver driver) Set newWindowsSet = driver.getWindowHandles();
newWindowsSet.removeAll(oldWindowsSet);
return newWindowsSet.size() > 0 ?
newWindowsSet.iterator().next() : null;
>
>
);
В режиме редактирования кода подчеркнут конструктор ExpectedCondition в строке
.until(new ExpectedCondition()
Сам я в Java не настолько силен чтобы понять в чем дело. Не могли бы вы уточнить в чем может быть причина?
В моем пакетном исполнении несколько браузеров с несколькими вкладками открываются для первого сценария. Я хотел закрыть все эти браузеры перед запуском второго сценария.
Driver.close() просто закрывает одну вкладку браузера. Driver.quit() закрывает все браузеры, а также завершает сеанс WebDriver . Итак, я не могу запустить пакетное выполнение. Пожалуйста, предоставьте решение для этого.
3 ответа
Приведенное ниже объяснение должно объяснить разницу между методами driver.close и driver.quit в WebDriver. Надеюсь, вы сочтете это полезным.
driver.close и driver.quit - два разных метода закрытия сеанса браузера в Selenium WebDriver.
Понимание их обоих и знание того, когда использовать каждый метод, важно при выполнении теста. Поэтому я попытался пролить свет на оба этих метода.
driver.close - этот метод закрывает окно браузера, на котором установлен фокус. driver.quit закрыть сеанс webdriver, пока driver.close закрывает только текущее окно, в котором присутствует элемент управления селеном, но сеанс webdriver еще не закрывается, если другое окно не открывается и вы вызываете driver.close , затем он также закрывает сеанс webdriver.
driver.quit - этот метод в основном вызывает driver.dispose теперь внутренний метод, который, в свою очередь, закрывает все окна браузера и корректно завершает сеанс WebDriver.
driver.dispose - как упоминалось ранее, это внутренний метод WebDriver, который был отключен в соответствии с другим ответом - требуется проверка. Этот метод действительно не имеет варианта использования в обычном рабочем процессе тестирования, так как любой из предыдущих методов должен работать для большинства случаев использования.
Объяснение варианта использования: вы должны использовать driver.quit всякий раз, когда хотите завершить программу. Он закроет все открытые окна браузера и завершит сеанс WebDriver. Если вы не используете driver.quit в конце программы, сеанс WebDriver не закроется должным образом и файлы не будут удалены из памяти. Это может привести к ошибкам утечки памяти.
Теперь в этом случае вам нужен конкретный браузер. Ниже приведен код, который закроет все дочерние окна, кроме главного окна.
Теперь вам нужно изменить или добавить условие в соответствии с вашими потребностями.
В настоящее время проверяется только то, совпадает ли домашнее окно с дочерним окном или нет. Здесь вам нужно указать условие, например, какой идентификатор вы хотите закрыть. Я никогда не пробовал, поэтому просто предложил вам способ выполнить ваше требование.
Этот код закрывает все открытые окна, а затем возвращает управление в главное окно.
October
September
August
March
February
- February 24, 2021 » Вышла Selenide 5.19.0
- February 11, 2021 » Вышла Selenide 5.18.1
January
December
- December 30, 2020 » Вышла Selenide 5.17.2
- December 26, 2020 » Вышла Selenide 5.17.0
November
- November 25, 2020 » Вышла Selenide 5.16.2
- November 20, 2020 » Вышла Selenide 5.16.0
- November 17, 2020 » Почему прокси не работает в Selenoid?
September
August
- May 29, 2020 » Вышла Selenide 5.12.2
- May 25, 2020 » Вышла Selenide 5.12.1
- May 23, 2020 » Вышла Selenide 5.12.0
April
March
February
- February 28, 2020 » Вышла Selenide 5.8.0
- February 7, 2020 » Вышла Selenide 5.7.0
January
December
- December 26, 2019 » Вышла Selenide 5.6.0
- December 24, 2019 » Трюки с JavaScript
- December 22, 2019 » Defaŭlta lingvo
- December 20, 2019 » Теория большого вейта
- December 18, 2019 » Как получить сетевые запросы с помощью прокси
- December 17, 2019 » Как получить логи браузера через JavaScript
- December 16, 2019 » Как получить логи браузера
- December 15, 2019 » Drag and Drop
- December 12, 2019 » Actions
- December 10, 2019 » Как скачать файл с помощью Selenide
- December 9, 2019 » Почему статики запретили, а потом разрешили?
- December 7, 2019 » Как протестировать защиту от CSRF атаки
- December 6, 2019 » Как визуализировать клик
- December 4, 2019 » Как быстро проверить размер?
- December 3, 2019 » setWebDriver или WebDriverProvider?
- December 2, 2019 » Как надругаться над Селенидом
- December 1, 2019 » Главный Алгоритм
November
October
- October 31, 2019 » Вышла Selenide 5.5.0
- October 16, 2019 » Вышла Selenide 5.4.1
September
- September 7, 2019 » Вышла Selenide 5.3.1
- September 2, 2019 » Вышла Selenide 5.3.0
August
February
December
November
October
August
April
- April 25, 2018 » Вышла Selenide 4.11.2
- April 3, 2018 » Вышла Selenide 4.11.1
- April 2, 2018 » Вышла Selenide 4.11.0
January
December
October
September
- September 30, 2017 » Вышла Selenide 4.7
- September 9, 2017 » Вышла Selenide 4.6
February
January
December
- December 30, 2016 » Вышла Selenide 4.2
- December 1, 2016 » Вышла Selenide 4.1
November
October
- October 20, 2016 » Обёртка или чистый вебдрайвер?
- October 15, 2016 » Вышла Selenide 4.0
- October 14, 2016 » Вышла Selenide 3.11
September
- September 26, 2016 » Вышла Selenide 3.10
- September 3, 2016 » Вышла Selenide 3.9.2
August
April
March
February
January
- January 29, 2016 » Вышла Selenide 3.2
- January 17, 2016 » Вышла Selenide 3.1
November
- November 30, 2015 » Вышла Selenide 3.0
- November 30, 2015 » Изменения в Selenide 2.25
- November 16, 2015 » Selenide меняет лицензию на MIT
- November 13, 2015 » Презентация Selenide на Devoxx 2015
- November 8, 2015 » Изменения в Selenide 2.24
September
- September 23, 2015 » Доклад о Selenide на SeleniumConf 2015
- September 15, 2015 » Изменения в Selenide 2.23
August
December
- December 28, 2014 » Как тестировать GMail
- December 17, 2014 » Где взять время на рефакторинг
- December 13, 2014 » The fast and the continuous @ SQA Days 16
- December 9, 2014 » Вы находите не те ошибки
November
October
September
- September 28, 2014 » Изменения в Selenide 2.13 и 2.14
- September 25, 2014 » Как начать писать UI тесты за 10 минут
August
April
March
- March 15, 2014 » Изменения в Selenide 2.9
- March 12, 2014 » Selenide downloads: 200 уникальных IP
- March 11, 2014 » Selenide за пять минут от Glen Smith
October
August
April
Мотивация
Почему недостаточно Selenium webdriver
Зачем понадобилась ещё одна обёртка над Selenium?
Page Objects
Можно ли использовать Пэдж Обжекты с Selenide?
Да! Вы можете использовать Пэдж Обжекты с Selenide.
Более того, с Selenide ваши page objects станут короче и читабельнее. Тут подробности.
Настройки
Где я могу найти все доступные настройки Selenide?
Описание всех настроек и значений по умолчанию можно найти в javadoc.
Selenide имеет очень разумные настройки по умолчанию, которые должны быть удобны для большинства “нормальных” проектов.
Но если всё-таки захочется запустить тесты с другими настройками, это можно сделать либо через System property:
либо программно, прямо в тестах:
Браузеры
Можно ли запустить тесты Selenide на Internet Explorer? А headless-браузере?
Да. Selenide можно запускать с любым браузером, для которого существует webdriver. Самые популярные браузеры поддерживаются из коробки (chrome, firefox, edge, ie, safari, opera). Некоторые менее популярные тоже поддерживаются, но требуют пары строк конфигурации (phantomjs, htmlunit). См. Wiki.
Другие браузеры тоже можно использовать, передав имя класса вебдрайвера.
Например, чтобы запустить тесты с браузером Firefox: -Dselenide.browser=firefox
Как сказать Selenide использовать браузер с моим кастомным профайлом?
Вы можете подсунуть Selenide любой экземпляр webdriver, который вы можете создать с какими угодно параметрами. Смотри примеры на Wiki.
Можно ли использовать Selenide в связке с Selenium Grid?
Можно ли использовать Selenide в связке с Selenoid?
Можно ли использовать Selenide для тестирования мобильных приложений?
Да, Selenide поддерживает тестирование мобильных приложений с помощью библиотеки Appium.
- Мы рекомендуем использовать селенидовский плагин selenide-appium.
- Вы можете найти рабочие примеры на гитхабе
- Посмотрите презентацию Selenide для мобилок
Билд-скрипты
Как запустить тесты Selenide на CI - сервере непрерывной интеграции?
Для этого нужно написать билд-скрипт. Скорее всего он у вас уже есть. На Wiki page есть несколько примеров на Ant и Gradle.
Скриншоты (снимок экрана)
Как сказать Selenide сохранять скриншоты в другую папку?
Вкладки/окна браузера
Как переключаться между разными окошками / вкладками браузера?
Для этого можно использовать API самого Selenium WebDriver.
- getWebDriver().getWindowHandles() - возвращает множество всех вкладок или окон
- getWebDriver().getWindowHandle() - возвращает уникальный идентификатор активной вкладки или окна.
Исходный код Selenide
Могу ли я посмотреть исходный код Selenide?
Да. Исходный код Selenide выложен на гитхабе.
Могу ли я вносить изменения в Selenide?
Конечно! На то он и open source. Если умеете кодить сами, смело создавайте Pull Request, если нет - оформляйте свои пожелалки в виде issue.
Лицензия
Если наш заказчик потребует исходный код тестов, позволяет ли лицензия Selenide ему их передать?
Selenide - бесплатный продукт с открытым исходным кодом, распространяемый по лицензии MIT. Проще говоря, это значит, что вы можете делать с ним всё что угодно.
Читайте также: