Транспортир - транспортир и сервер Selenium
Как обсуждалось ранее, Protractor - это комплексная среда тестирования с открытым исходным кодом для приложений Angular и AngularJS. Это программа Node.js. С другой стороны, Selenium - это среда автоматизации браузера, которая включает в себя Selenium Server, API WebDriver и драйверы браузера WebDriver.
Транспортир с селеном
Если мы говорим о соединении Protractor и Selenium, Protractor может работать с сервером Selenium для обеспечения инфраструктуры автоматизированного тестирования. Инфраструктура может имитировать взаимодействие пользователя с приложением angular, запущенным в браузере или на мобильном устройстве. Соединение Protractor и Selenium можно разделить на три раздела, а именно: тест, сервер и браузер, как показано на следующей диаграмме -
Процессы Selenium WebDriver
Как мы видели на приведенной выше диаграмме, тест с использованием Selenium WebDriver включает следующие три процесса:
- Тестовые скрипты
- Сервер
- Браузер
В этом разделе давайте обсудим связь между этими тремя процессами.
Связь между тестовыми сценариями и сервером
Связь между первыми двумя процессами - тестовыми скриптами и сервером зависит от работы Selenium Server. Другими словами, мы можем сказать, что способ работы сервера Selenium придаст форму процессу связи между тестовыми скриптами и сервером.
Сервер Selenium может работать локально на нашей машине как автономный сервер Selenium (selenium-server-standalone.jar) или он может работать удаленно через службу (Sauce Labs). В случае автономного сервера Selenium между Node.js и сервером selenium будет http-соединение.
Связь между сервером и браузером
Как мы знаем, сервер отвечает за пересылку команд в браузер после их интерпретации из тестовых сценариев. Вот почему сервер и браузер также требуют средства связи, и здесь связь осуществляется с помощьюJSON WebDriver Wire Protocol. В браузер добавлен драйвер браузера, который используется для интерпретации команд.
Вышеупомянутое понятие о процессах Selenium WebDriver и их взаимодействии можно понять с помощью следующей диаграммы -
При работе с Protractor самый первый процесс, то есть тестовый скрипт, запускается с использованием Node.js, но перед выполнением каких-либо действий в браузере он отправляет дополнительную команду, чтобы убедиться, что тестируемое приложение стабилизировано.
Настройка Selenium Server
Selenium Server действует как прокси-сервер между нашим тестовым скриптом и драйвером браузера. По сути, он перенаправляет команду из нашего тестового сценария в WebDriver и возвращает ответы от WebDriver нашему тестовому скрипту. Существуют следующие варианты настройки сервера Selenium, которые включены вconf.js файл тестового скрипта -
Автономный Selenium Server
Если мы хотим запустить сервер на нашей локальной машине, нам нужно установить автономный селен-сервер. Необходимым условием для установки автономного сервера selenium является JDK (Java Development Kit). У нас должен быть установлен JDK на нашем локальном компьютере. Мы можем проверить это, выполнив следующую команду из командной строки -
java -version
Теперь у нас есть возможность установить и запустить Selenium Server вручную или из тестового сценария.
Установка и запуск Selenium server вручную
Для установки и запуска сервера Selenium вручную нам нужно использовать инструмент командной строки WebDriver-Manager, который поставляется с Protractor. Шаги по установке и запуску сервера Selenium следующие:
Step 1- Первый шаг - установка сервера Selenium и ChromeDriver. Это можно сделать с помощью следующей команды -
webdriver-manager update
Step 2- Далее нам нужно запустить сервер. Это можно сделать с помощью следующей команды -
webdriver-manager start
Step 3- Наконец, нам нужно установить seleniumAddress в конфигурационном файле на адрес работающего сервера. Адрес по умолчанию будетhttp://localhost:4444/wd/hub.
Запуск сервера Selenium из тестового скрипта
Для запуска сервера Selenium из тестового сценария нам необходимо установить следующие параметры в нашем файле конфигурации:
Location of jar file - Нам нужно указать расположение файла jar для автономного сервера Selenium в файле конфигурации, установив seleniumServerJar.
Specifying the port- Нам также нужно указать порт, который будет использоваться для запуска автономного Selenium Server. Его можно указать в файле конфигурации, установив seleniumPort. Порт по умолчанию - 4444.
Array of command line options- Нам также необходимо установить массив параметров командной строки для передачи на сервер. Его можно указать в файле конфигурации, установив seleniumArgs. Если вам нужен полный список массивов команд, то запустите сервер с-help флаг.
Работа с удаленным сервером Selenium
Другой вариант запуска нашего теста - удаленное использование сервера Selenium. Предварительным условием для удаленного использования сервера является наличие учетной записи в службе, в которой размещен сервер. При работе с Protractor у нас есть встроенная поддержка следующих сервисов, на которых размещен сервер:
TestObject
Для использования TestObject в качестве удаленного сервера Selenium нам необходимо установить testobjectUser, имя пользователя нашей учетной записи TestObject и testobjectKey, ключ API нашей учетной записи TestObject.
BrowserStack
Для использования BrowserStack в качестве удаленного сервера Selenium нам необходимо установить browserstackUser, имя пользователя нашей учетной записи BrowserStack и browserstackKey, ключ API нашей учетной записи BrowserStack.
Соус Лаборатории
Для использования Sauce Labs в качестве удаленного Selenium Server нам нужно установить соусаUser, имя пользователя нашей учетной записи Sauce Labs и SauceKey, ключ API нашей учетной записи Sauce Labs.
Кобитон
Для использования Kobiton в качестве удаленного Selenium Server нам необходимо установить kobitonUser, имя пользователя нашей учетной записи Kobiton и kobitonKey, ключ API нашей учетной записи Kobiton.
Прямое подключение к драйверу браузера без использования Selenium Server
Еще один вариант запуска нашего теста - напрямую подключиться к драйверу браузера без использования сервера Selenium. Protractor может тестировать напрямую, без использования Selenium Server, против Chrome и Firefox, установив directConnect: true в файле конфигурации.
Настройка браузера
Перед настройкой и настройкой браузера нам нужно знать, какие браузеры поддерживает Protractor. Ниже приведен список браузеров, поддерживаемых Protractor.
- ChromeDriver
- FirefoxDriver
- SafariDriver
- IEDriver
- Appium-iOS/Safari
- Appium-Android/Chrome
- Selendroid
- PhantomJS
Для установки и настройки браузера нам нужно перейти в файл конфигурации Protractor, потому что настройка браузера выполняется в объекте возможностей файла конфигурации.
Настройка Chrome
Для настройки браузера Chrome нам нужно установить объект возможностей следующим образом
capabilities: {
'browserName': 'chrome'
}
Мы также можем добавить параметры, специфичные для Chrome, которые вложены в chromeOptions, и их полный список можно увидеть на https://sites.google.com/a/chromium.org/chromedriver/capabilities.
Например, если вы хотите добавить счетчик FPS в правом верхнем углу, это можно сделать в файле конфигурации следующим образом:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['show-fps-counter=true']
}
},
Настройка Firefox
Для настройки браузера Firefox нам нужно установить объект возможностей следующим образом:
capabilities: {
'browserName': 'firefox'
}
Мы также можем добавить параметры для Firefox, которые вложены в объект moz: firefoxOptions, и его полный список можно увидеть на https://github.com/mozilla/geckodriver#firefox-capabilities.
Например, если вы хотите запустить свой тест в Firefox в безопасном режиме, это можно сделать в файле конфигурации следующим образом:
capabilities: {
'browserName': 'firefox',
'moz:firefoxOptions': {
'args': ['—safe-mode']
}
},
Настройка другого браузера
Для настройки любого другого браузера, кроме Chrome или Firefox, нам необходимо установить отдельный двоичный файл из https://docs.seleniumhq.org/download/.
Настройка PhantonJS
Фактически, PhantomJS больше не поддерживается из-за проблем с его сбоями. Вместо этого рекомендуется использовать Chrome без головы или Firefox без головы. Их можно настроить следующим образом -
Чтобы настроить Chrome без головы, нам нужно запустить Chrome с флагом –headless следующим образом:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': [“--headless”, “--disable-gpu”, “--window-size=800,600”]
}
},
Для настройки безголового Firefox нам нужно запустить Firefox с –headless флаг следующим образом -
capabilities: {
'browserName': 'firefox',
'moz:firefoxOptions': {
'args': [“--headless”]
}
},
Настройка нескольких браузеров для тестирования
Мы также можем протестировать против нескольких браузеров. Для этого нам нужно использовать опцию конфигурации multiCapabilities следующим образом:
multiCapabilities: [{
'browserName': 'chrome'
},{
'browserName': 'firefox'
}]
Какой фреймворк?
Protractor поддерживает две среды тестирования BDD (разработка, управляемая поведением), Jasmine и Mocha. Обе инфраструктуры основаны на JavaScript и Node.js. Эти платформы обеспечивают синтаксис, отчет и строительные леса, необходимые для написания тестов и управления ими.
Далее мы увидим, как мы можем установить различные фреймворки -
Жасминовая рамка
Это стандартная тестовая среда для Protractor. Когда вы установите Protractor, вы получите версию Jasmine 2.x. Нам не нужно устанавливать его отдельно.
Фреймворк Mocha
Mocha - еще одна среда тестирования JavaScript, в основном работающая на Node.js. Для использования Mocha в качестве нашей тестовой среды нам необходимо использовать интерфейс BDD (разработка, управляемая поведением) и утверждения Chai с Chai As Promised. Установка может быть выполнена с помощью следующих команд -
npm install -g mocha
npm install chai
npm install chai-as-promised
Как видите, при установке mocha используется опция -g, потому что мы установили Protractor глобально с помощью опции -g. После его установки нам нужно потребовать и настроить Chai в наших тестовых файлах. Это можно сделать следующим образом -
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
После этого мы можем использовать Chai As Promised как таковой -
expect(myElement.getText()).to.eventually.equal('some text');
Теперь нам нужно установить для свойства framework значение mocha файла конфигурации, добавив framework: 'mocha'. Такие параметры, как «репортер» и «медленно» для мокко, могут быть добавлены в файл конфигурации следующим образом:
mochaOpts: {
reporter: "spec", slow: 3000
}
Рамка из огурца
Чтобы использовать Cucumber в качестве нашей тестовой среды, нам необходимо интегрировать его с Protractor с опцией framework custom. Установка может быть произведена с помощью следующих команд
npm install -g cucumber
npm install --save-dev protractor-cucumber-framework
Как видите, опция -g используется при установке Cucumber, потому что мы установили Protractor глобально, то есть с опцией -g. Затем нам нужно установить для свойства framework значениеcustom файла конфигурации, добавив framework: 'custom' и frameworkPath: 'Protractor-cucumber-framework' в файл конфигурации с именем cucumberConf.js.
Пример кода, показанный ниже, представляет собой базовый файл cucumberConf.js, который можно использовать для запуска файлов функций огурца с помощью Protractor -
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
baseUrl: 'https://angularjs.org/',
capabilities: {
browserName:'Firefox'
},
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
specs: [
'./cucumber/*.feature'
],
// cucumber command line options
cucumberOpts: {
require: ['./cucumber/*.js'],
tags: [],
strict: true,
format: ["pretty"],
'dry-run': false,
compiler: []
},
onPrepare: function () {
browser.manage().window().maximize();
}
};