Помогите выяснить вопрос про враперы, фреймворки и утилиты для Силениума

Всем привет!
Начал учить Silenium WD и сразу столкнулся с таким вопросом:
Может кто-то обьяснить какая разница между враперами типа Selenide и фреймворками, а также зачем нужны утилиты типа py.test (я планирую автоматизировать на python).
Не интересуясь всеми подробностями, я думал что есть Силениум и язык програмирования и ничего больше не нужно, но после как только начал читать понял что есть еще куча инструментов вокруг селениума. И откровенно говоря запутался когда какой и зачем использовать.
Подскажите что зачем и для чего нужно ?

“Есть селениум и ничего больше не нужно” - это то же самое, что “есть ассемблер и ничего больше не нужно”. Ну или “есть сырое мясо и ничего больше не нужно”.

Очень просто: вы можете писать тесты на голом селениуме, но это будет неэффективно. Вам придётся тратить время и нервы на решение ряда типичных проблем. А можете взять фреймворк типа Selenide, в котором эти проблемы уже решены.

P.S. Оговорюсь, целый ряд типичных проблем возникает не потому, что Selenium плохой, а потому, что он по определению не инструмент для тестирования, а инструмент для управления браузером. Из-за этой (на первой взгляд незначительной) разницы возникает куча проблем.

1 лайк

А вы не подскажете какая разница между обертками и фреймворками ?
И в комбинации с чем использовать ?

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

Это такой философский вопрос, есть разные мнения на эту тему.

Лично я считаю - и в предпоследнем выпуске Radio QA тоже сошлись на этом - что лучше учить Selenide. Потому что это примерно то же самое, что “лучше учиться жарить мясо” или “лучше сначала научиться охотиться на момента, чтобы если что, уметь всё”.

Селениум учить в любом случае нужно, поскольку, зная селениум, понять обёртки - нетрудно, зато наоборот - не факт. Начните с selenium + page object, дальше в процессе обучения поймёте, какие дополнительные паттерны Вам лично ближе.

2 лайка

Я так понял, что я затронул холиварную тему :slight_smile: своим незнанием :slight_smile:

Еще раз повторюсь, в чем разница между врапером и фреймворком ?

Фреймворк - это то, что группирует ваши тесты, запускает их и формирует отчет. Враппер - это обертка над чем то.

Ну ок, сразу все понятно стало!)))

"Чтобы ответить на этот вопрос, я сформулирую его иначе: кому и зачем стоит изучать Selenium, а кому лучше использовать более высокоуровневые библиотеки и инструменты?

Какой бы инструмент вы ни использовали, вам нужно выбрать драйвер, управляющий браузером. Чтобы его выбрать, вы должны знать возможности драйвера – что он может, а чего не может. На этом уровне Selenium необходимо освоить каждому специалисту по автоматизации. При этом конкретно интерфейс WebDriver, если вы с ним работаете, изучать нет необходимости.

Простой набор команд выучить проще, чем «расширенный», то есть Selenium освоить проще, чем его расширение. У этого явления есть и обратная сторона – если вы изучили расширенный набор команд, то внезапно оказывается, что набор команд WebDriver вы при этом тоже освоили.

Расширения, как правило, языково-зависимые, потому что добавление удобства предполагает использование языковых идиом, типичных приёмов организации кода на том или ином языке программирования. Базовый интерфейс WebDriver простой, поэтому освоив его, вы сможете использовать его на любом языке, он будет выглядеть практически одинаково.

Большинство библиотек, нацеленных на повышение удобства интерфейса, улучшают средства поиска элементов – дополнительные типы локаторов, более удобный способ описания локаторов и так далее. Примитивы, соответствующие действиям пользователя, в WebDriver уже и так достаточно хороши. Хотя, конечно, библиотеки будут реализовывать типовые «связки», то есть последовательности этих действий, аналогично тому, как это сделано в классе Select для выпадающих списков.

Если вы используете «таблички» для описания тестов (как в Robot Framework) или специальный язык для описания на уровне предметной области (DSL, Domain Specific Language) – вам нет необходимости знать о примитивах WebDriver. Но если вы реализуете «фикстуры» для тестов, описываете действия, которыми можно будет оперировать в табличках, реализуете DSL – вам придётся работать непосредственно с WebDriver, либо с каким-то его расширением, но не слишком высокоуровневым.

И самый последний аргумент, который, я надеюсь, со временем будет становиться всё менее актуальным – увы, пока хороших расширений катастрофически не хватает. Они обязательно появятся. Может быть, именно вы реализуете одно из таких расширений. Для этого вам понадобиться изучить интерфейс WebDriver. И те, кто будут пользоваться плодами вашего труда, смогут работать с более высокоуровневой библиотекой. А пока приходится использовать непосредственно WebDriver с небольшими надстройками над ним."
источник: Что такое Selenium WebDriver? / Habr

Для начала вам нужно определиться как вы будете запускать ваши тесты.
PyTest это инструмент для запуска тестов, вы вполне можете использовать встроенный unittest для этого, просто у PyTest есть дополнительные плюшки, например генерация отчетов в приемлемом для CI сервера формате. (В unittest кстати тоже с некоторыми усилиями можно сгенерить отчет). Есть еще nose для этих же целей.
Ваши тесты могут использовать selenium driver или нет. Если вы намерены в ваших тестах запускать браузер и осуществлять какие-то действия то вы используете selenium модуль питона (не встроеный, ставиться отдельно), который дает вам доступ к интерфейсу вебдрайвера и вам предоставляется возможность запустить браузер, перейти по нужному урлу, вводить данные и получать их и тд… Ну и вы эти данные используете в своих тестах.

Сам вебдрайвер (скачаный вами файлик для определенного браузера), должен лежать рядом со скриптом, откуда вы запускаете тесты или путь к нему должен быть прописан. Если на Firefox будете тесты запускать то он там “на борту” уже. Для Chrome точно драйверок скачать нужно.

Page Object паттерн почитайте еще, паттерн это “натоптаный” способ организации вашего кода. Информации полно в интернете и прям на питоне. Это поможет вам сразу не сделать многих ошибок.

Думаю, что для начала этого вам достаточно.
Будете использовать python, смотрите сюда http://selenium-python.readthedocs.org/

А вот это ни разу не правда.
Selenide, например, как раз тем и хорош, что позволяет одной командой сделать то, что в Selenium займёт несколько строк, а иногда и вовсе невозможно. А хуже всего, когда оно заставляет возращаться к себе много-много раз.

Вроде как с 45 версии появился отдельный драйвер для ФФ. Марионетт драйвер, и насколько я понял от поддержки старого избавятся в ближайших версиях ФФ. Хотя я могу ошибаться, особо не копал в эту сторону ещё. Поправьте меня если это не так) з.ы. Кто нибудь пробовал марионетки уже? Мне он показадся пока что сыроватым. Не сработал даже метод driver.close() :smiley:

Может быть.
Ну то такое, перестанет работать - скачаем. )

Пусть он лучше начнет с Селениума, а потом уже Селенид заюзает.

А я вот не согласен. Пусть начнёт с селенида и дальше инвестирует свои силы в постижение грамотного тестирования, а не набивание шишек о неподходящий инструмент.

А selenide разве не для java? Автор вроде как питон хотел… :slight_smile:

2 лайка

Комьюнити у Селениума на несколько порядков выше, чем у селенида.
Вот и думай :wink:

1 лайк

@youRooock ага, и обсуждает это коммьюнити в основном те проблемы, которые в selenide уже решены. Вот и думай.

Да, Selenide для Java. Но для Python есть аналог (Selene).