В предыдущей статье мы выполнили:
- Добавили бинарный файл Selenium Chromedriver.
- Установили WebDriverJs используя NPM.
- Имея представление, что в javascript методы работают асинхронно, уточнили как работать с методом than().
Рассмотрим парочку примеров. Первый из них:
1 2 3 4 5 6 7 |
var webdriver = require('selenium-webdriver'); var browser = new webdriver.Builder().usingServer().withCapabilities({'browserName': 'chrome' }).build(); browser.get('http://en.wikipedia.org/wiki/Wiki'); browser.findElements(webdriver.By.css('[href^="/wiki/"]')).then(function(links){ console.log('Found', links.length, 'Wiki links.' ) browser.quit(); }); |
Его можно запустить следующим образом:
$ node Wiki.js

Первые две строчки инициализируют объект браузера и задают несколько настороек, например, какой браузер использовать. Начиная с вызова browser.get мы задаем функциональный код нашего теста:
- Сначала мы переходим на страницу википедии.
- Дальше мы используем CSS селектор, который находит элемент с атрибутом href и значением /wiki/ (находим внутренние страницы википедии).
- Оставаясь на линии кода шага №2, мы передаем CSS селектор в метод findElements, который асинхронно находит элементы, отвечающие заданному выражению.
- Дальше результат работы метода мы передаем функции callback-функции сетода then.
- Первый аргумент этой функции – массив искомых элементов (ссылок). Таким образом, мы выводим количество ссылок.
- И в самом конце закрываем браузер.
В следующем примере рассмотрим пример поиска в Google и переход на страницу результата поиска.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/* * Carry out a Google Search */ "use strict"; var webdriver = require('selenium-webdriver'); var browser = new webdriver.Builder().usingServer().withCapabilities({'browserName': 'chrome' }).build(); function logTitle() { browser.getTitle().then(function(title) { console.log('Current Page Title: ' + title); }); } function clickLink(link) { link.click(); } function handleFailure(err) { console.error('Something went wrong\n', err.stack, '\n'); closeBrowser(); } function findUefaLink() { return browser.findElements(webdriver.By.css('[href="http://www.uefa.com/"]')).then(function(result) { return result[0]; }); } function closeBrowser() { browser.quit(); } browser.get('https://www.google.com'); browser.findElement(webdriver.By.name('q')).sendKeys('uefa site'); browser.findElement(webdriver.By.name('btnG')).click(); browser.wait(findUefaLink, 2000).then(clickLink).then(logTitle).then(closeBrowser, handleFailure); |
Запустите код:
$ node GoogleSearch.js

В тесте мы переходим на страницу поиска Google и ищем словосочетание “uefa site” и переходим по первой ссылке в результате поиска на запрашиваемый сайт.
Ожидания
Когда мы выполняли поиск WebDriver как можно быстрее пытается выполнить поиск элемента для перехода на страницу результата поиска. Понимание, где нужно подождать до нахождения элемента – важная часть в веб автоматизации.
Наиболее часто используют метод sleep. Довольно часто, например из-за медленного интернета или плохо написанного кода, автоматизаторы принуждают WebDriver подождать до появления элемента.
В нашем примере метод имеет два аргумента: первый – функция поиска ссылки, второй – максимальное время на ее выполнение.
Настройка браузера
Помимо многих методов по работе с DOM-элементами Вы может также использовать методы изменения состояния браузера. Ниже представлено несколько простых примеров:
- Установка размера окна браузера:
1 |
browser.manage().window().setSize(1280, 720) |
- Подключение к браузеру через прокси:
1 2 3 4 5 6 7 8 |
var proxy = require('selenium-webdriver/proxy'); browser = new webdriver.Builder() .usingServer() .withCapabilities({'browserName': 'chrome' }) .setProxy(proxy.manual({ http: '127.0.0.1:9000' })) .build(); |
Вы также можете изменят, удалять cookies, делать скриншоты и т.д., – все как и при работе с обычным Webdriver.