Архив блога

Почему в 3.3.1 перестали работать предикаты в явных ожиданиях?
"Is Edge really that fast?"
jBrowserDriver: альтернатива для PhantomJS
Titanium: встраиваемый прокси-сервер на C#
Автоматизация тестирования: нужно ли изучать теорию?
Повышаем надёжность Selenium тестов через JavaScript
Ghostdriver ищет нового хозяина
"Почему FirefoxDriver кликает не туда?"
Прощайте, нативные события!
Изменение семантики операции getCurrentUrl в Selenium
Поддержка Selenium в Borland Silk Central
Как, куда и почему развивается Selenium?
Вы знаете, что такое Selenium? А вот и нет!
Selenium Bitnami нужен?
Разработка Selenium-тестов на TypeScript
QtWebDriver: драйвер для Qt-приложений
Каким сборщиком вы пользуетесь?
Firefox 38.0.1 и "жёлтая скала"
Больше cookies для Internet Explorer!
Как выращивать автотесты: видеозапись
Infer: новый инструмент статического анализа кода от Facebook
Как выращивать автотесты
Встречайте новый инструмент автоматизации: HP LeanFT
Баги не только в программах, но и в новостях
Устанавливаем свой маленький локальный веб-сервер
Запуск Selenium-тестов в браузере Opera
Быстрое создание Maven-проекта для Selenium-тестов
Интерация JUnit и TestNG со средами разработки IDEA, Eclipse и NetBeans
Интеграция JUnit и TestNG со сборщиками Maven, Ant и Gradle
И ещё раз о том, как "правильно" запускать браузер

Примерно раз в год я пишу статью про то, «как правильно запускать браузер» :) Но эта, надеюсь, будет последняя в серии. Небольшая предыстория. Давным-давно, в 2010 году на конференции SeleniumCamp я рассказывал про оптимизацию скорости выполнения тестов, и одна из первых рекомендаций была «используйте уже запущенный браузер повторно, не перезапускайте его для каждого теста заново». Потому что запуск браузера — весьма длительная и ресурсоёмкая операция. Чуть позже, уже в 2011 году, я написал первую статью, в которой я изложил «теоретические основы науки о запуске браузеров». Через год после этого появилась вторая статья, в которой описывалась конкретная реализация утилиты, управляющей запущенными браузерами. К ней, естественно, прилагался проект с программным кодом этой утилиты. Ещё через год я наконец выложил усовершенствованный вариант этой утилиты на GitHub, и вот теперь пришло время написать сопроводительную документацию ...

Selenium и BrowserMobProxy: вместе веселее!
Устанавливаем свой маленький локальный веб-сервер
Фреймворк Html Elements, или как удобно взаимодействовать с веб-интерфейсами в тестах
Проект Роботестер

Илья Кацев рассказывает об автономном инструменте для тестирования веб-интерфейсов, созданном в Яндексе. Чтобы такой инструмент (робот) мог осуществить тестирование, он должен «обойти» весь сайт, то есть побывать на всех его страницах (или хотя бы побывать во всех состояниях одной страницы). Поэтому проблемы очень близки проблемам, возникающим при создании поисковых роботов. Значительная разница заключается в том, что поисковый краулер переходит со страницы на страницу по ссылкам, а для задач тестирования нам необходимо взаимодействовать с элементами страницы: заполнять формы, вызывать ajax-действия и так далее. К тому же современные сайты (RIA) имеют фактически бесконечное число состояний, поэтому надо применять новые подходы как при построении стратегии обхода, так и при оценке действий робота (трудно оценить, какую часть сайта мы обошли). ...

Каким будет Selenium 3.0 и Selenium 4.0?
Читабельные отчеты для автоматизации на C# и Selenium Webdriver (Gallio Automation Platform + BDDfy)
Протоколирование в Selenium
Как правильно запускать браузер, часть 2
Что такое Selenium WebDriver?
Что такое Selenium?
Как запускать Internet Explorer
Отладка Selenium-скриптов в Groovy Console

Когда я начал готовить примеры для рассылки "Selenium 2.0: сотня полезных советов", передо мной встал вопрос выбора языка, на котором писать эти примеры. С одной стороны, хотелось использовать Java, потому что это "официальный" язык Selenium и все новые штуки сначала реализуются на Java, а только потом переносятся в реализации на других языках. С другой стороны, хотелось сделать так, чтобы примеры были компактными, но при этом полностью завершенными и готовыми к исполнению -- взял и целиком запустил. Для этой цели лучше подходят динамические языки, Java слишком "многословна", много инфраструктурного кода. В конце концов я остановился на промежуточном варианте: сложные примеры на Java, а простые -- на Groovy, это динамический язык, но весьма похожий на Java и выполняющийся на виртуальной Java-машине. Но решающим фактором в пользу Groovy стало наличие симпатичной интерактивной консоли, в которой можно удобно экспериментировать со скриптами. Хотите -- выполните пример полностью, а хотите -- выделите фрагмент кода и выполните только его. ...

Строим Web Testing Framework за 20 минут
Selenium против AJAX

На данный момент мир веб-приложений интенсивно развивается и интерфейс становится все более динамичным. Повсеместно используется асинхронное обновление элементов и AJAX. И такие веб-приложения приходится тестировать с помощью Selenium/WebDriver. Автоматизированный тест можно разбить на атомарные фрагменты, которые многократно выполняются в цикле: “найди элемент”, “выполни действие”, “подожди результат”. При автоматизации AJAX-приложений проблемы возникают со всеми тремя видами фрагментов. Во-первых, искать элементы сложно, потому что они как правило имеют динамические локаторы (нет фиксированных идентификаторов или имен). Во-вторых, спектр возможных действий весьма широк. Это не только клики по ссылкам, как в “традиционных” веб-приложения, но и наведение курсора на элемент, перетаскивание, нажатия клавиш. Ну и самое сложное — это ожидания. Что является признаком того, что некоторое действие выполнилось успешно или неуспешно? Появление или исчезноваение какого-то элемента? Добегание счётчика или прогресс-бара до 100%? А может быть не стоит вообще ждать полного завершения действия, достаточно лишь частичного результата, чтобы уже можно было продолжить выполнение теста? На конференции Selenium Camp Алексей Баранцев рассказал о том, как WebDriver решает все эти три задачи, особенно вторую и третью. ...

Автоматизация тестирования HTML5-приложений на Ruby + WebDriver
Selenium 2.0: замедляем тесты и подсвечиваем элементы
Раз селениум, два селениум

Три дня тому назад, ровно в полночь (по московскому времени), торжественно, под звуки фанфар, вышла вторая версия инструмента автоматизации веб-приложений Selenium 2.0. И это действительно очень важное событие в жизни тестировщиков, занимающихся автоматизацией веб-приложений, потому что это не простое обновление, а совершенно новый инструмент! На протяжении предыдущих двух месяцев, когда Selenium 2.0 находился на этапе бета-тестирования, и многие уже начали пробовать новую версию, мне неоднократно приходилось отвечать на вопрос, в чем же состоит кардинальное отличие 2.0 от предыдущей версии, и почему они при переходе на 2.0 никакого отличия не заметили. Мне приходилось объяснять, что для “настоящего” перехода на версию 2.0 недостаточно просто загрузить новый дистрибутив, надо ещё и переписать все свои тесты :) И это не совсем шутка, в ней есть изрядная доля правды ...

Как правильно запускать браузер, часть 1

На конференции SeleniumCamp, состоявшейся в Киеве в феврале 2010 года, я проводил мастер-класс по оптимизации скорости выполнения тестов, разработанных с использованием инструмента Selenium. И самый первый совет, который я дал, вовсе не касается оптимизации самих тестов. Я предложил обратить внимание на то, как запускается браузер, потому что при неудачной конфигурации время, которое тратится на запуск и останов браузера может на порядок превышать “полезное” время выполнения тестов. Я разработал для себя универсальный механизм запуска браузера для инструмента Selenium, который позволяет достаточно гибко управлять различными способами использования браузера в зависимости от потребностей – один браузер на все тесты либо перезапуск перед каждым тестовым методом, автоматический останов браузера после завершения выполнения тестов, автоматический перезапуск браузера при сбоях или после заданного количества использований, а также в случае переключения на другой тип браузера или другой Selenium-сервер, чтение параметров запуска из конфигурационного файла или передача параметров из программного кода. Но прежде чем рассказать про реализацию этого механизма и отдать его в широкое использование, я хочу изложить свою точку зрения на очень важный, как мне кажется, вопрос: Как правильно запускать браузер? ...

Selenium без тормозов

В последнее время мне нередко приходится слышать от тестировщиков-автоматизаторов ожидания относительно того, что с выходом Selenium 2.0 выполнение тестов заметно ускорится. Мне тоже хотелось бы на это надеяться. Пока эксперименты показывают обратное -- некоторые операции действительно работают быстрее, но зато другие стали медленнее, так что в среднем ускорения не заметно, а иногда даже наоборот, тесты после перехода на новую версию начинают выполняться дольше. Конечно, может быть чудо случится и Selenium 2.0 действительно будет фантастически быстр, но зачем ждать? Если ваши тесты выполняются слишком долго, можно уже сейчас попытаться предпринять действия по их оптимизации. Я говорил об этом на недавно прошедшей в Киеве конференции SeleniumCamp, и предлагаю посмотреть видеозапись этого выступления, состоящую из двух частей -- теоретической и демонстрационной. ...

Selenium 2.0: просмотр элементов веб-страницы в отладчике
Selenium: как отключить same origin policy в браузере Google Chrome
Selenium: ожидание завершения всех AJAX-запросов
Selenium: Снятие скриншотов веб-страницы целиком
Ожидание событий в Selenium RC, часть 2 -- AJAX
Ожидание событий в Selenium RC, часть 1
Selenium: Снятие скриншотов на удаленной машине
Selenium+TestNG: Автоматическое снятие скриншотов при неуспешном прохождении теста

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