Comments 16
Есть ЛК МТС-а, вытаскиваю информацию из него через PhantomJS
Но сумрачный гений разработчиков сайта не дремлет — после загрузки каркаса страницы делается ещё куча ajax-запросов (неизвестное заранее количество), с произвольным временем исполнения.
Как я понимаю — ни средствами PhantomJS, ни, вероятно движком selenium нельзя отловить окончательную загрузку страницы…
Сейчас тупо ставлю таймауты 10 секунд и более — чтоб уж прогрузилось наверняка. В selenium есть какой-то функционал?
Не пользуйтесь случаем, заходите на toster.ru и спрашивайте свой вопрос там в любое время
Явные ожидания — это ожидание выполнения конкретного условия (появилось значение, элемент стал видимым, изменился цвет и т.д.)
Подробнее:
http://selenium2.ru/docs/webdriver-advanced-usage.html
https://kreisfahrer.gitbooks.io/selenium-webdriver/content/webdriver_intro/ozhidaniya.html
В PhantomJS — callback на page.onLoadFinished и парсим прилетающие iframe'ы, пока не найдём то, что нужно. Муторно, но волшебства никакого, поделиться не жалко — пишите в личку или сюда, если кому это добро сгодится.
В обоих фреймворках есть довольно легкие в использовании и в то же время конфигурируемые инструменты для ожидания наличия/отсутствия/видимости/невидимости заданного DOM-элемента, в Nightwatch эта функция и ей подобные, в TestCafe есть более богатый набор, и вообще можно использовать кастомный селектор, проверяющий сложное условие — к примеру, наличие заданных relative-элементов и другой программной логики, которую можно написать в клиентском JS-коде
Насчет iframe-ов, есть иснтументы для переключения активного контекста окна, это есть и в Nightwatch, и TestCafe ( Здесь и здесь )
Будет круто, если ты в следующих раз будешь анализировать еще и интеграцию подобных библиотек с системами непрерывной интеграции: jenkins, teamcity, appveyor и т.д.
Пользуясь случаем спрошу:
С помощью nightwatchjs можно ли покрыть тестовым кодом функцию загрузки файла? У меня на странице есть кнопка, при нажатии на эту кнопку происходит загрузка текстового файла. Размер файла меняется при каждой загрузке.
@Ayzatqa, спасибо! Насчет вопроса — имеется в виду <input type="file" />
? Если да, то в TestCafe для этого есть уже готовое решение, оно проверено работает
Для nightwatchjsЮ во всей видимости, можно реализовать через конструкцию .setValue('input#fileUpload', require('path').resolve(__dirname + '/testfile.txt'))
, как предлагают здесь, но работоспособность решения гарантировать не могу
И еще, почему вы для сравнения выбрали 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 стиль выглядит более читаемым, хотя наверное это уже дело вкуса.
Насчет 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).
Функциональное тестирование современных web-приложений