Pull to refresh

Comments 16

Пользуясь случаем спрошу:
Есть ЛК МТС-а, вытаскиваю информацию из него через PhantomJS
Но сумрачный гений разработчиков сайта не дремлет — после загрузки каркаса страницы делается ещё куча ajax-запросов (неизвестное заранее количество), с произвольным временем исполнения.
Как я понимаю — ни средствами PhantomJS, ни, вероятно движком selenium нельзя отловить окончательную загрузку страницы…

Сейчас тупо ставлю таймауты 10 секунд и более — чтоб уж прогрузилось наверняка. В selenium есть какой-то функционал?

Не пользуйтесь случаем, заходите на toster.ru и спрашивайте свой вопрос там в любое время

Там чтото не густо тех кто отвечает: https://toster.ru/q/365407
В селениеуме есть неявные и явные ожидания — первые о том, что нужно ждать заданное время, тут все понятно
Явные ожидания — это ожидание выполнения конкретного условия (появилось значение, элемент стал видимым, изменился цвет и т.д.)

Подробнее:
http://selenium2.ru/docs/webdriver-advanced-usage.html
https://kreisfahrer.gitbooks.io/selenium-webdriver/content/webdriver_intro/ozhidaniya.html
конкретно в Nightwatch есть waitForElementVisible('selector')
Вовсе без всяких таймаутов прекрасно парсим этот позрный кошмарик — МТС ЛК. Стабильно получаем баланс, остаток трафика и кол-во дней до оплаты.
В PhantomJS — callback на page.onLoadFinished и парсим прилетающие iframe'ы, пока не найдём то, что нужно. Муторно, но волшебства никакого, поделиться не жалко — пишите в личку или сюда, если кому это добро сгодится.

В обоих фреймворках есть довольно легкие в использовании и в то же время конфигурируемые инструменты для ожидания наличия/отсутствия/видимости/невидимости заданного DOM-элемента, в Nightwatch эта функция и ей подобные, в TestCafe есть более богатый набор, и вообще можно использовать кастомный селектор, проверяющий сложное условие — к примеру, наличие заданных relative-элементов и другой программной логики, которую можно написать в клиентском JS-коде
Насчет iframe-ов, есть иснтументы для переключения активного контекста окна, это есть и в Nightwatch, и TestCafe ( Здесь и здесь )

ihost, спасибо за статью, узнал много полезного. Я бы еще посоветовал обратить внимание на webdriverIO.

Будет круто, если ты в следующих раз будешь анализировать еще и интеграцию подобных библиотек с системами непрерывной интеграции: jenkins, teamcity, appveyor и т.д.

Пользуясь случаем спрошу:

С помощью nightwatchjs можно ли покрыть тестовым кодом функцию загрузки файла? У меня на странице есть кнопка, при нажатии на эту кнопку происходит загрузка текстового файла. Размер файла меняется при каждой загрузке.

@Ayzatqa, спасибо! Насчет вопроса — имеется в виду <input type="file" />? Если да, то в TestCafe для этого есть уже готовое решение, оно проверено работает
Для nightwatchjsЮ во всей видимости, можно реализовать через конструкцию .setValue('input#fileUpload', require('path').resolve(__dirname + '/testfile.txt')), как предлагают здесь, но работоспособность решения гарантировать не могу

Спасибо за обзор, узнал про Testcafe. Выглядит очень интересно (особенно на фоне засилия WD-based решений), но разве его подход не аналогичен старому Selenium'у — Selenium RC. Там вроде как раз тоже сервер проксирующий поднимался для подсовывания скрипты внутри браузера, который эмулировал воздействия юзера (теста). Но ведь он него ушли к WebDriver'ам. Не спроста…

И еще, почему вы для сравнения выбрали Nightwatch? В качестве WD-based? Есть Intern (по ссылке сравнение есть). В Intern используется библиотека Leadfoot в качестве обертки WebDriver.

Еще есть семейство WebDriverIO. В припципе это тоже WebDriver, но якобы клиент полностью реальнован на js (WebDriver это вообще протокол). Они гордятся своим синхронным API поверх WD. Прявда у меня примеры из gettering start не заработали :( (но это руки наверное).
Свой раннер, но при этом поддерживаются различные test-фреймворки (mocha/jasmine), любые assert'ы и репортеры.
но разве его подход не аналогичен старому Selenium'у — Selenium RC.

Да, подход похож. Наверное основное преимущество TestCafe для Node разработчиков в том что оно не требует Java, меньше стыков и движущихся частей. А насчет использования WD или Proxy решения — у каждого есть и достоинства и недостатки.
Ну, например, proxy способ не требует присутствия вашего кода рядом с браузером. Если вам кастомер говорит что на какой-то модели телефона что-то не работает, вы можете запустить тесты в этом телефоне просто запустив
testcafe remote --qr-code test.js

и сосканировав qr код. С Selenium надо будет повозиться в таком сценарии.
С помощью nightwatchjs можно ли покрыть тестовым кодом функцию загрузки файла

С помощи функции setValue все загружается прекрасно. Главное чтоб не менялось названиею

Далее по тексту

Асинхронные комманды выполняются с помощью функции .executeAsync() Прочитайте, прошу Вас

К тому же под Nightwatch есть очень и очень много разнообразных примочек и фишек: nightwatch-cucumber, mocha,grid. Миллион разных репортеров, легкая интеграция с дженкинсом и, по большому счету, много людей сейчас под него разное пилит, что врят будет под Testcafe
К тому же под Nightwatch есть очень и очень много разнообразных примочек и фишек

Для TestCafe вы просто пишите ES6-код, и можете использовать множество различных библиотек в import-е под свои надобности, причем в selenium-е какие-то сторонние вещи интегрировать в код теста придется через эту функцию, то в TestCafe это обычный код — в таком смысле, возможности по интеграции куда шире.


Асинхронные комманды выполняются с помощью функции .executeAsync()

Безусловно! Однако этот функционал предоставляет значительно большие возможности. Да и promise / async-based стиль выглядит более читаемым, хотя наверное это уже дело вкуса.

Использую webdriverio с pageobject pattern и multiremote. Нет возможность параллельного запуска нескольких сьютов. Говорят, сделают в будущем (https://github.com/webdriverio/webdriverio/issues/1695).

Насчет TestCafe сразу возникло много вопросов:
— есть ли возможность тестирования в 2+ клиента одновременно (2 пользователя с разных логинов)?
— возможен ли параллельный запуск нескольких наборов тестов (suites)? Можно ли скормить пачку сьютов, получить параллельное выполнение (экономию времени) и получить общий отчет?
— и комбо: параллельный запуск нескольких сьютов, а в каждом используется по 2 клиента…

— можно ли отлаживать тесты через devtool? Пошагово в браузере, короче.
есть ли возможность тестирования в 2+ клиента одновременно (2 пользователя с разных логинов)

Пока такой возможности в TestCafe нет, но мы планируем ее добавить (issue на GitHub)

возможен ли параллельный запуск нескольких наборов тестов (suites)? Можно ли скормить пачку сьютов, получить параллельное выполнение (экономию времени) и получить общий отчет

Можно запустить параллельное выполнение различных наборов тестов (в TestCafe они называются fixtures), но в результате будут получены два не связанных отчета.

и комбо: параллельный запуск нескольких сьютов, а в каждом используется по 2 клиента

После добавления функциональности одновременного логина нескольких пользователей параллельный запуск таких тестов будет возможен.

можно ли отлаживать тесты через devtool? Пошагово в браузере

Для того, чтобы установить точку останова на клиенте (для devtool) сейчас необходимо воспользоваться ClientFunction, то есть написать код, который будет выполнен на клиенте:
const breakpoint = ClientFunction(() => {
    debugger;
});

await breakpoint();

В будущем мы планируем упростить процедуру отладки на клиенте и реализовать для этого специальную функцию (issue на GitHub).
Спасибо за ответы. Подписался на обновления указанных вами issue.

Хотел бы еще добавить, что про wdio я имел в виду, что нет возможности параллельного запуска тестов при multiremote, то есть разные сессии, а так пожалуйста, хоть сразу все варианты браузеров и их версий.
Sign up to leave a comment.

Articles

Change theme settings