В этой статье мы рассмотрим Selenium WebDriverJs (Javascript) (https://code.google.com/p/selenium/wiki/WebDriverJs), который довольно часто используется в веб автоматизации. Мы юудем использовать Chrome, который имеет драйвер даже для автоматизации браузеров мобильных устройств.
Эта статья даст общее представление о тестировании с помощью WebDriverJs для начала работы.
Вам будет легко, если у Вас имеются определенные знания языка JavaScript и если Вы знаете, как запускать код с помощью Node.js (http://nodejs.org/). Скачать и установить Node.js довольно просто.
WebDriverJS
Чтобы разобраться более детально, скачайте проект, который включает несколько примеров использования WebDriverJs, которые Вы можете легко запустить. Также Вам понадобится Chromedriver (https://code.google.com/p/selenium/wiki/ChromeDriver). После скачивания и разархивирования положите его в корень папки с проектом.
Selenium WebDriverJs имеет сервер и клиент. Выполните следующую команду для его установки:
npm install selenium-webdriver
После установки файлов вебдрайвера Вам нужно будет подключить его в код проекта следующим образом (у меня это уже сделано):
1 |
require('selenium-webdriver'); |
Также можно включить его как зависимость в файле package.json.
В конце папка проекта должна выглядеть следующим образом:
Webdriver.js имеет много методов, например, Вы можете заметить следующие getAttribute and getText.
Привожу пример наиболее используемых:
- get - переход в браузере по URL.
- findElements - аналог document.querySelectorAll в браузере.
- executeScript – выполнение строки кода JavaScript на текущей странице.
- getText – получение контента элемента, включая его дочерние элементы.
- isDisplayed – поиск всех видимых элементов на странице.
Цепочки методов Javascript
Каждый метод в цепочках является асинхронным. Это означает, что следующий код не вернет название страницы:
1 2 3 |
var title = browser.getTitle(); //logs { then: [Function: then], cancel: [Function: cancel], isPending: [Function: isPending] } console.log(title); |
Вместо этого нужно сделать следующие преобразования:
1 2 3 4 5 |
var promise = browser.getTitle(); promise.then(function(title) { console.log(title); }); |
WebDriverJs использует такие конструкции для более удобной работы с асинхронным кодом.
Главное, что нужно понять, что методы WebDriver возвращают метод then, который принимает два аргумента. Первый является callback функцией, которая может принимать значения.
В примере выше мы запрашиваем название. После этого функция принимает это название в качестве первого аргумента. Второй опциональный аргумент мы можем передать в метод then, который позволит отлавливать ошибки, если такие возникнут.