Транспортир - транспортир и сервер 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();
   }
};