Comments 31
А продолжение будет? Хотелось бы почитать статьи в таком же стиле о том как запустить много браузеров для 5 одновременных независимых тестов например.
Про продолжение обещать не буду, заглядывайте на сайт, посвященный selenium (ссылка у меня в профиле), более технические статьи я обычно публикую там.
А на второй вопрос вкратце отвечу. Именно для этой цели предназначен Selenium Grid. Делаем кластер с пятью узлами. Для запуска тестов используем фреймворк, который умеет запускать тесты в параллельных потоках. Нацеливаем тесты на кластер — профит!
Если свой кластер строить не хочется — можно запускать тесты в облаках.
А на второй вопрос вкратце отвечу. Именно для этой цели предназначен Selenium Grid. Делаем кластер с пятью узлами. Для запуска тестов используем фреймворк, который умеет запускать тесты в параллельных потоках. Нацеливаем тесты на кластер — профит!
Если свой кластер строить не хочется — можно запускать тесты в облаках.
Хотелось бы увидеть цикл статей по этой теме. Вчера немного повозился с ним, возникла масса вопросов. К примеру — как подключить chromium? можно ли не запускать браузер каждый раз заного, а подключиться к уже запущенному? А то слишком уж долго грузится Firefox. Есть ли для python-драйвера метод, который позволил бы дождаться полной загрузки страницы, и не использовать time.sleep(0.5)? Беглый поиск выдал только это — документация для python.
1) code.google.com/p/selenium/wiki/ChromeDriver
и в частности
code.google.com/p/selenium/wiki/ChromeDriver#Overriding_the_Chrome_binary_location
2) Драйвер для Firefox при каждом запуске создаёт новый чистый профиль, поэтому долго стартует. Запустите браузер один раз, и используйте полученный инстанс драйвера во всех тестах.
3) WebDriver автоматически дожидается загрузки страницы. Но если у вас AJAX — это не помогает. Ожидайте появления нужного элемента, прежде чем с ним работать. Не используйте sleep!
4) Официальная документация для питона находится тут: selenium.googlecode.com/svn/trunk/docs/api/py/index.html
и в частности
code.google.com/p/selenium/wiki/ChromeDriver#Overriding_the_Chrome_binary_location
2) Драйвер для Firefox при каждом запуске создаёт новый чистый профиль, поэтому долго стартует. Запустите браузер один раз, и используйте полученный инстанс драйвера во всех тестах.
3) WebDriver автоматически дожидается загрузки страницы. Но если у вас AJAX — это не помогает. Ожидайте появления нужного элемента, прежде чем с ним работать. Не используйте sleep!
4) Официальная документация для питона находится тут: selenium.googlecode.com/svn/trunk/docs/api/py/index.html
Жаль, что закрыли для паблика CI Selenium. Или он просто переехал? Поделитесь ссылкой?
Вы не в курсе, планируется ли драйвер для firefox сделать частью проекта firefox?
Были ли проблемы, связанные с тем, что драйвер для chrome реализует не команда Selenium? Или наоборот, это сплошные преимущества?
Вы не в курсе, планируется ли драйвер для firefox сделать частью проекта firefox?
Были ли проблемы, связанные с тем, что драйвер для chrome реализует не команда Selenium? Или наоборот, это сплошные преимущества?
Интерфейс сервера непрерывной интеграции теперь здесь: ci.seleniumhq.org:8080/
Кроме того, имеется альтернативный интерфейс: dashboard.ci.seleniumhq.org/
Про драйвер Firefox можно почитать вот тут: selenium2.ru/news/59-marionette-is-the-future-of-firefoxdriver.html
Передача драйверов в ведение компаний-вендоров имеет как плюсы, так и минусы. Плюсы в основном технические — они всё-таки лучше разбираются во внутренностях браузеров. Минусы в основном организационные, например — нецентрализованный баг-трекер, у каждого свой, это весьма неудобно.
Кроме того, имеется альтернативный интерфейс: dashboard.ci.seleniumhq.org/
Про драйвер Firefox можно почитать вот тут: selenium2.ru/news/59-marionette-is-the-future-of-firefoxdriver.html
Передача драйверов в ведение компаний-вендоров имеет как плюсы, так и минусы. Плюсы в основном технические — они всё-таки лучше разбираются во внутренностях браузеров. Минусы в основном организационные, например — нецентрализованный баг-трекер, у каждого свой, это весьма неудобно.
Отличная статья, спасибо!
Есть ли возможность запускать тесты от лица разных пользователей Active Directory?
Это не имеет прямого отношения к инструментам семейства Selenium, задача запуска тестов как правило решается силами серверов сборки и непрерывной интеграции (Jenkins, TeamCity, TFS или ещё какого-нибудь). Поэтому вопрос к вашему серверу непрерывной интеграции — может ли он запускать тесты от лица разных пользователей?
С другой стороны, не так важно, под каким пользователем запускаются тесты. Гораздо важнее, от лица какого пользователя запускается браузер. Поэтому — строим Selenium Grid, а в его узлах запускаем сервера Selenium от лица нужных пользователей. Теперь стартуем тесты, и они выполняются в браузерах, которые работают под нужной учёткой.
С другой стороны, не так важно, под каким пользователем запускаются тесты. Гораздо важнее, от лица какого пользователя запускается браузер. Поэтому — строим Selenium Grid, а в его узлах запускаем сервера Selenium от лица нужных пользователей. Теперь стартуем тесты, и они выполняются в браузерах, которые работают под нужной учёткой.
А как работают тесты: окошко браузера открывается и там начинается магия — двигается курсор, заполняются поля форм и все без моего участия, и я все это вижу на экране монитора? Или там все происходит в фоне как у phantomjs?
UFO just landed and posted this here
Оба можно. В рамках проекта Selenium помимо драйверов для реальных браузеров разрабатывается также драйвер для HtmlUnit, который, конечно, работает без всяких окошек.
Кроме того, есть проект GhostDriver, который представляет собой независимую реализацию интерфейса WebDriver как раз для PhantomJS. Есть вероятность того, что в какой-то момент он войдёт в состав проекта Selenium. На данный момент GhostDriver проходит успешно чуть более 90% официальных тестов для WebDriver (последняя цифра, которую я видел, была 91.64%).
Чем это лучше? Почему нельзя просто использовать PhantomJS? Можно, конечно. Вся фишка Selenium — в едином интерфейсе. Хотите — запускаете тесты в реальном браузере, хотите — запускаете те же самые тесты в PhantomJS через GhostDriver.
Кроме того, есть проект GhostDriver, который представляет собой независимую реализацию интерфейса WebDriver как раз для PhantomJS. Есть вероятность того, что в какой-то момент он войдёт в состав проекта Selenium. На данный момент GhostDriver проходит успешно чуть более 90% официальных тестов для WebDriver (последняя цифра, которую я видел, была 91.64%).
Чем это лучше? Почему нельзя просто использовать PhantomJS? Можно, конечно. Вся фишка Selenium — в едином интерфейсе. Хотите — запускаете тесты в реальном браузере, хотите — запускаете те же самые тесты в PhantomJS через GhostDriver.
Большое спасибо, о Селениуме я узнал с хабра. Было тут пару статей, но не было ни одной статьи, где объяснялась вся эта мешанина в названиях.
Из-за глюка в браузере Firefox, приходится иногда использовать Chrome, но есть проблема с запуском на маке. В документации сказано, что нужно положить гугловский драйвер в любое место в системе, запустить его и пропишется путь к нему. На деле же выяснилось, что в винде надо его класть в папку в python (я на нем программирую). А на маке мне так и не удалось запустить драйвер для Хрома. Все равно не находится этот путь.
Еще мне не нравится, что иногда в документации не всё прописано. Я уже глубоко копаю, дошел до API. В нем описана опция, как сграбить все линки, я перепробовал кучу вариантов, в результате пришлось цикл писать. Теперь у меня вопрос, как послать команду на сохранения страницы? Не хотелось бы опять прописывать всю логику.
Получение исходного кода вебстраницы — это команду я нашел где-то в дебрях интернета, но не на официальном сайте.
Также у них есть большое сообщество поддержки на Google Groups, но как выяснилось в интернете в целом Селениум очень любят джависты. Очень много примеров на Java и совсем мало для Python.
Из-за глюка в браузере Firefox, приходится иногда использовать Chrome, но есть проблема с запуском на маке. В документации сказано, что нужно положить гугловский драйвер в любое место в системе, запустить его и пропишется путь к нему. На деле же выяснилось, что в винде надо его класть в папку в python (я на нем программирую). А на маке мне так и не удалось запустить драйвер для Хрома. Все равно не находится этот путь.
Еще мне не нравится, что иногда в документации не всё прописано. Я уже глубоко копаю, дошел до API. В нем описана опция, как сграбить все линки, я перепробовал кучу вариантов, в результате пришлось цикл писать. Теперь у меня вопрос, как послать команду на сохранения страницы? Не хотелось бы опять прописывать всю логику.
Получение исходного кода вебстраницы — это команду я нашел где-то в дебрях интернета, но не на официальном сайте.
Также у них есть большое сообщество поддержки на Google Groups, но как выяснилось в интернете в целом Селениум очень любят джависты. Очень много примеров на Java и совсем мало для Python.
1. Про «глюк»: попробуйте использовать новую экспериментальную стратегию ожидания, про неё написано внизу этой странички — code.google.com/p/selenium/wiki/FirefoxDriver
2. С маками не помогу, не имею опыта работы с этой системой.
3. Чтобы «сграбить все линки» достаточно использовать простейший поиск: driver.findElements(By.tagName(«a»)). Или Вы что-то иное имеете в виду? Загрузить все страницы, на которые ведут ссылки? Ну так это уже не задача Selenium, а Ваша задача — написать «граббер», используя библиотеку Selenium WebDriver.
4. Метода для сохранения страницы нет. Есть метод для получения кода страницы — driver.getPageSource(). Только имейте в виду, что это уже будет не то, что было написано в оригинальном коде, а что-то типа «дампа DOM».
2. С маками не помогу, не имею опыта работы с этой системой.
3. Чтобы «сграбить все линки» достаточно использовать простейший поиск: driver.findElements(By.tagName(«a»)). Или Вы что-то иное имеете в виду? Загрузить все страницы, на которые ведут ссылки? Ну так это уже не задача Selenium, а Ваша задача — написать «граббер», используя библиотеку Selenium WebDriver.
4. Метода для сохранения страницы нет. Есть метод для получения кода страницы — driver.getPageSource(). Только имейте в виду, что это уже будет не то, что было написано в оригинальном коде, а что-то типа «дампа DOM».
3. Это вы уже привели начало цикла. Я про другое говорил, у них в API было get_all_links. Сейчас посмотрел, они исправили документацию, убрали устаревшие функции. Теперь проще будет.
4. А можно ли послать последовательность команд Shift+S? Я видел пример на php, кто-то умудрился такое сделать. У него страницы сохранялись. Пытался для Python переписать, застрял на keys.chain
На каком языке вы программируете? Это PHP?
4. А можно ли послать последовательность команд Shift+S? Я видел пример на php, кто-то умудрился такое сделать. У него страницы сохранялись. Пытался для Python переписать, застрял на keys.chain
На каком языке вы программируете? Это PHP?
А расскажите, зачем вам потребовалось сохранять страницу?
Можно же сделать скриншот…
Можно же сделать скриншот…
1. В рамках проекта Selenium клиент для языка PHP не разрабатывается. Есть целых пять независимых разработок, они описаны вот в этой статье: element34.ca/blog/a-survey-of-the-php-and-selenium-landscape, но ни одна из них не является «официально рекомендованной».
Я обычно пишу на Java, иногда на Ruby, изредка на Python. Поэтому про PHP вряд ли смогу помочь советом.
2. Отправить последовательность команд Control-S можно (я думаю, Вы имели в виду именно это сочетание клавиш?) — driver.findElement(By.tagName(«body»)).sendKeys(Keys.CONTROL + «s»), но после этого появится диалоговое окно, с которым Selenium WebDriver уже работать не умеет, и придётся привлекать дополнительные библиотеки, с помощью которых можно ввести в это окно нужное имя файла и подтвердить сохранение.
Я обычно пишу на Java, иногда на Ruby, изредка на Python. Поэтому про PHP вряд ли смогу помочь советом.
2. Отправить последовательность команд Control-S можно (я думаю, Вы имели в виду именно это сочетание клавиш?) — driver.findElement(By.tagName(«body»)).sendKeys(Keys.CONTROL + «s»), но после этого появится диалоговое окно, с которым Selenium WebDriver уже работать не умеет, и придётся привлекать дополнительные библиотеки, с помощью которых можно ввести в это окно нужное имя файла и подтвердить сохранение.
Мне показалось, что вы программируете на php, я его сам фактически не знаю и не нужен он мне. Поэтому помощь мне тут не нужна. Просто для себя уточнил ваш язык программирования. А почему джависты так любят Селениум? Для них это единственный инструмент парсинга?
Вот тут решение вопроса, как можно автоматизировать нажатие кнопки save. Я вижу на stackoverflow постоянно встречаются вопросы, как закачать файл и многие советуют для этого Селениум.
Вот тут решение вопроса, как можно автоматизировать нажатие кнопки save. Я вижу на stackoverflow постоянно встречаются вопросы, как закачать файл и многие советуют для этого Селениум.
>>> Для них это единственный инструмент парсинга?
Что Вы имеете в виду? Ещё раз: Selenium WebDriver — это драйвер браузера. Взаимодействие с веб-сервером, парсинг, рендеринг страниц, интерпретацию JavaScript-кода — всё это делает браузер. А Selenium всего лишь предоставляет интерфейс для управления браузером.
>>> А почему джависты так любят Селениум?
Правильнее спросить наоборот — почему те, кто разрабатывают тесты на Selenium, предпочитают Java?
Причин как минимум две. Во-первых, реализация всех новых фич в Selenium сначала делается на Java, отлаживается, тестируется, и только после этого фича реализуется в клиентах на других языках. Почему в качестве основного языка выбран Java? Так исторически сложилось :)
Во-вторых, для языка Java разработано больше разных расширений и надстроек над Selenium. Хотя для Ruby, скажем, их тоже немало.
Что Вы имеете в виду? Ещё раз: Selenium WebDriver — это драйвер браузера. Взаимодействие с веб-сервером, парсинг, рендеринг страниц, интерпретацию JavaScript-кода — всё это делает браузер. А Selenium всего лишь предоставляет интерфейс для управления браузером.
>>> А почему джависты так любят Селениум?
Правильнее спросить наоборот — почему те, кто разрабатывают тесты на Selenium, предпочитают Java?
Причин как минимум две. Во-первых, реализация всех новых фич в Selenium сначала делается на Java, отлаживается, тестируется, и только после этого фича реализуется в клиентах на других языках. Почему в качестве основного языка выбран Java? Так исторически сложилось :)
Во-вторых, для языка Java разработано больше разных расширений и надстроек над Selenium. Хотя для Ruby, скажем, их тоже немало.
Я тоже на каждом углу говорю всем, что Selenium WebDriver — это исключительно инструмент тестирования. Чтобы не пугать некоторых, а то они начинают нервничать. Но для меня это больше, чем просто тестирование. При помощи Selenium WebDriver я решил глобальную проблему над которой долго бился. Мне нужен был автоматический терминал, который постоянно заполняет формы. Нужно каждый раз вводить имя-фамилию, адрес — это терминал оплаты. Раньше я это делал все ручками и чуть с ума не сходил от такой работы, постоянно ошибался и получал большую попа-боль от начальства за свои ошибки.
А сейчас я всю информацию загоняю в текстовой файл, далее уже начинается работа Selenium WebDriver.
Насчет сохранения вебстраниц. Я решил удалить свой жж, но перед этим захотел сохранить всю свою писанину. Для этого я задействовал sqlite, чтобы WebDriver мог помнить по каким страницам он ходил. За 10 минут мой дневничок с сотнями постов полностью сохранился со всеми комментариями пользователей. Правда в виде скриншотов. Но и на том спасибо, я спокойно удалил свой жж.
А сейчас я всю информацию загоняю в текстовой файл, далее уже начинается работа Selenium WebDriver.
Насчет сохранения вебстраниц. Я решил удалить свой жж, но перед этим захотел сохранить всю свою писанину. Для этого я задействовал sqlite, чтобы WebDriver мог помнить по каким страницам он ходил. За 10 минут мой дневничок с сотнями постов полностью сохранился со всеми комментариями пользователей. Правда в виде скриншотов. Но и на том спасибо, я спокойно удалил свой жж.
может на базе этого сделать сервис?
Получи дамп своего жж / своей станицы соц сети.
Или не своей :)
Получи дамп своего жж / своей станицы соц сети.
Или не своей :)
Я еще пока не такой хороший программист и для дампа не стал бы использовать Селениум. Например, есть еще такой супер инструмент как grab. Просто это то, что пока я знаю. Кстати, возможно жж специально не делает такую фичу, как сохранения дневника, чтобы пользователям было сложней соскочить. Так что возможно они такой сервис заблокируют. А вот liveInternet.ru наоборот такую фичу предоставляет, но наверное это потому что на этом сервисе куча школоблогеров.
>>> Вот тут решение вопроса, как можно автоматизировать нажатие кнопки save.
Вы не путаете сохранение кода страницы и загрузку файла? Однако и то и другое выходит за пределы возможностей Selenium, поэтому…
>>> Я вижу на stackoverflow постоянно встречаются вопросы, как закачать файл и многие советуют для этого Селениум.
… те, кто даёт такие советы — лучше бы не давали. Желающим рекомендую ознакомиться вот с этой статьёй: How To Download Files With Selenium And Why You Shouldn’t @ Lazery Reflections. В ней описаны не все возможные способы загрузки файлов, но всё таки это наиболее удачное описание проблемы и способов её решения.
Вы не путаете сохранение кода страницы и загрузку файла? Однако и то и другое выходит за пределы возможностей Selenium, поэтому…
>>> Я вижу на stackoverflow постоянно встречаются вопросы, как закачать файл и многие советуют для этого Селениум.
… те, кто даёт такие советы — лучше бы не давали. Желающим рекомендую ознакомиться вот с этой статьёй: How To Download Files With Selenium And Why You Shouldn’t @ Lazery Reflections. В ней описаны не все возможные способы загрузки файлов, но всё таки это наиболее удачное описание проблемы и способов её решения.
UFO just landed and posted this here
1. Используйте Selenium Grid. Если не хочется разворачивать кластер самостоятельно — запускайте в облаках.
2. IE пока не получается запускать больше двух экземпляров на одной машине, это известная проблема. Мы надеемся, что когда разработчики из MS подключатся к проекту, удастся это решить.
Браузеры Firefox и Chrome без особых проблем могут работать в количестве 5-10 штук на одной машине. Некоторые запускают и больше. У нас в баг-трекере есть даже жалоба на то, что «не удается запустить больше 200 браузеров на одной машине, пожалуйста, уберите это ограничение!» :)
Зависаний при этом быть никаких не должно. Но некоторые штуки типа выпадающих меню и прочей динамики могут работать некорректно. Частично по вине Selenium, частично потому, что если браузер не в фокусе, то события срабатывают иначе, чем тогда, когда он в фокусе. Например, onblur вообще не срабатывает, это правильное документированное поведение браузера. Так что если есть AJAX — см. совет под номером 1.
2. IE пока не получается запускать больше двух экземпляров на одной машине, это известная проблема. Мы надеемся, что когда разработчики из MS подключатся к проекту, удастся это решить.
Браузеры Firefox и Chrome без особых проблем могут работать в количестве 5-10 штук на одной машине. Некоторые запускают и больше. У нас в баг-трекере есть даже жалоба на то, что «не удается запустить больше 200 браузеров на одной машине, пожалуйста, уберите это ограничение!» :)
Зависаний при этом быть никаких не должно. Но некоторые штуки типа выпадающих меню и прочей динамики могут работать некорректно. Частично по вине Selenium, частично потому, что если браузер не в фокусе, то события срабатывают иначе, чем тогда, когда он в фокусе. Например, onblur вообще не срабатывает, это правильное документированное поведение браузера. Так что если есть AJAX — см. совет под номером 1.
А еще вопрос, а можно сделать так, чтобы Firefox запускался с установленными плагинами? У меня стоит adblock и flashblock, они блокируют всякие рекламные модули, и страница грузится намного быстрей.
Старая статья, но Selenium 3, как я понимаю, не вышел?
И Selenium Server — это то, что в папке github.com/SeleniumHQ/selenium/tree/trunk/java/server?
И Selenium Server — это то, что в папке github.com/SeleniumHQ/selenium/tree/trunk/java/server?
Sign up to leave a comment.
Что такое Selenium?