Transportador - Transportador y servidor de selenio

Como se discutió anteriormente, Protractor es un marco de prueba de código abierto de extremo a extremo para aplicaciones Angular y AngularJS. Es el programa Node.js. Por otro lado, Selenium es un marco de automatización del navegador que incluye Selenium Server, las API de WebDriver y los controladores del navegador WebDriver.

Transportador con selenio

Si hablamos de la conjunción de Transportador y Selenium, Transportador puede trabajar con el servidor Selenium para proporcionar una infraestructura de prueba automatizada. La infraestructura puede simular la interacción del usuario con una aplicación angular que se ejecuta en un navegador o en un dispositivo móvil. La conjunción de transportador y selenio se puede dividir en tres particiones, a saber, prueba, servidor y navegador, como se muestra en el siguiente diagrama:

Procesos de Selenium WebDriver

Como hemos visto en el diagrama anterior, una prueba que utiliza Selenium WebDriver implica los siguientes tres procesos:

  • Los guiones de prueba
  • El servidor
  • El navegador

En esta sección, analicemos la comunicación entre estos tres procesos.

Comunicación entre los scripts de prueba y el servidor

La comunicación entre los dos primeros procesos, los scripts de prueba y el servidor, depende del funcionamiento de Selenium Server. En otras palabras, podemos decir que la forma en que se ejecuta el servidor Selenium le dará forma al proceso de comunicación entre los scripts de prueba y el servidor.

El servidor Selenium puede ejecutarse localmente en nuestra máquina como Selenium Server independiente (selenium-server-standalone.jar) o puede ejecutarse de forma remota a través de un servicio (Sauce Labs). En el caso de un servidor Selenium independiente, habría una comunicación http entre Node.js y el servidor Selenium.

Comunicación entre el servidor y el navegador

Como sabemos, el servidor se encarga de reenviar los comandos al navegador después de interpretarlos desde los scripts de prueba. Es por eso que el servidor y el navegador también requieren un medio de comunicación y aquí la comunicación se realiza con la ayuda deJSON WebDriver Wire Protocol. El navegador ampliado con el controlador del navegador que se utiliza para interpretar los comandos.

El concepto anterior sobre los procesos de Selenium WebDriver y su comunicación se puede entender con la ayuda del siguiente diagrama:

Mientras trabaja con Transportador, el primer proceso, es decir, el script de prueba, se ejecuta con Node.js, pero antes de realizar cualquier acción en el navegador, enviará un comando adicional para asegurarse de que la aplicación que se está probando esté estabilizada.

Configuración de Selenium Server

Selenium Server actúa como un servidor proxy entre nuestro script de prueba y el controlador del navegador. Básicamente, reenvía el comando de nuestro script de prueba al WebDriver y devuelve las respuestas del WebDriver a nuestro script de prueba. Existen las siguientes opciones para configurar el servidor Selenium que se incluyen enconf.js archivo de secuencia de comandos de prueba -

Servidor Selenium independiente

Si queremos ejecutar el servidor en nuestra máquina local, necesitamos instalar un servidor selenio independiente. El requisito previo para instalar un servidor selenium independiente es JDK (Java Development Kit). Debemos tener JDK instalado en nuestra máquina local. Podemos verificarlo ejecutando el siguiente comando desde la línea de comandos:

java -version

Ahora, tenemos la opción de instalar e iniciar Selenium Server manualmente o desde un script de prueba.

Instalación e inicio del servidor Selenium manualmente

Para instalar e iniciar el servidor Selenium manualmente, necesitamos usar la herramienta de línea de comandos WebDriver-Manager que viene con Transportador. Los pasos para instalar e iniciar el servidor Selenium son los siguientes:

Step 1- El primer paso es instalar el servidor Selenium y ChromeDriver. Se puede hacer con la ayuda de ejecutar el siguiente comando:

webdriver-manager update

Step 2- A continuación, necesitamos iniciar el servidor. Se puede hacer con la ayuda de ejecutar el siguiente comando:

webdriver-manager start

Step 3- Por fin necesitamos establecer seleniumAddress en el archivo de configuración a la dirección del servidor en ejecución. La dirección predeterminada seríahttp://localhost:4444/wd/hub.

Iniciar el servidor Selenium desde un script de prueba

Para iniciar el servidor Selenium desde un script de prueba, debemos configurar las siguientes opciones en nuestro archivo de configuración:

  • Location of jar file - Necesitamos establecer la ubicación del archivo jar para el servidor Selenium independiente en el archivo de configuración configurando seleniumServerJar.

  • Specifying the port- También necesitamos especificar el puerto que se utilizará para iniciar el servidor Selenium independiente. Se puede especificar en el archivo de configuración configurando seleniumPort. El puerto predeterminado es 4444.

  • Array of command line options- También necesitamos configurar el conjunto de opciones de línea de comando para pasar al servidor. Se puede especificar en el archivo de configuración configurando seleniumArgs. Si necesita una lista completa de la matriz de comandos, inicie el servidor con el-help bandera.

Trabajar con Remote Selenium Server

Otra opción para ejecutar nuestra prueba es usar el servidor Selenium de forma remota. El requisito previo para usar el servidor de forma remota es que debemos tener una cuenta con un servicio que aloje el servidor. Mientras trabajamos con Transportador, tenemos el soporte integrado para los siguientes servicios que alojan el servidor:

TestObject

Para usar TestObject como el Servidor Selenium remoto, necesitamos establecer testobjectUser, el nombre de usuario de nuestra cuenta TestObject y testobjectKey, la clave API de nuestra cuenta TestObject.

BrowserStack

Para usar BrowserStack como el servidor Selenium remoto, necesitamos configurar el browserstackUser, el nombre de usuario de nuestra cuenta BrowserStack y browserstackKey, la clave API de nuestra cuenta BrowserStack.

Laboratorios de salsa

Para usar Sauce Labs como el servidor Selenium remoto, necesitamos configurar sauceUser, el nombre de usuario de nuestra cuenta de Sauce Labs y SauceKey, la clave API de nuestra cuenta de Sauce Labs.

Kobiton

Para usar Kobiton como Selenium Server remoto, debemos configurar kobitonUser, el nombre de usuario de nuestra cuenta Kobiton y kobitonKey, la clave API de nuestra cuenta Kobiton.

Conexión directa al controlador del navegador sin usar Selenium Server

Una opción más para ejecutar nuestra prueba es conectarse al controlador del navegador directamente sin usar el servidor Selenium. Transportador puede probar directamente, sin el uso de Selenium Server, contra Chrome y Firefox configurando directConnect: true en el archivo de configuración.

Configurar el navegador

Antes de configurar y configurar el navegador, necesitamos saber qué navegadores son compatibles con Protractor. La siguiente es la lista de navegadores compatibles con Protractor:

  • ChromeDriver
  • FirefoxDriver
  • SafariDriver
  • IEDriver
  • Appium-iOS/Safari
  • Appium-Android/Chrome
  • Selendroid
  • PhantomJS

Para configurar y configurar el navegador, debemos movernos al archivo de configuración de Transportador porque la configuración del navegador se realiza dentro del objeto de capacidades del archivo de configuración.

Configurando Chrome

Para configurar el navegador Chrome, debemos configurar el objeto de capacidades de la siguiente manera

capabilities: {
   'browserName': 'chrome'
}

También podemos agregar opciones específicas de Chrome que están anidadas en chromeOptions y su lista completa se puede ver en https://sites.google.com/a/chromium.org/chromedriver/capabilities.

Por ejemplo, si desea agregar un contador de FPS en la esquina superior derecha, puede hacerlo de la siguiente manera en el archivo de configuración:

capabilities: {
   'browserName': 'chrome',
   'chromeOptions': {
      'args': ['show-fps-counter=true']
   }
},

Configurando Firefox

Para configurar el navegador Firefox, necesitamos configurar el objeto de capacidades de la siguiente manera:

capabilities: {
   'browserName': 'firefox'
}

También podemos agregar opciones específicas de Firefox que están anidadas en el objeto moz: firefoxOptions y su lista completa se puede ver en https://github.com/mozilla/geckodriver#firefox-capabilities.

Por ejemplo, si desea ejecutar su prueba en Firefox en modo seguro, puede hacerlo de la siguiente manera en el archivo de configuración:

capabilities: {
   'browserName': 'firefox',
   'moz:firefoxOptions': {
     'args': ['—safe-mode']
   }
},

Configurar otro navegador

Para configurar cualquier otro navegador que no sea Chrome o Firefox, necesitamos instalar un binario separado de https://docs.seleniumhq.org/download/.

Configuración de PhantonJS

En realidad, PhantomJS ya no es compatible debido a sus problemas de bloqueo. En lugar de eso, se recomienda utilizar Chrome sin cabeza o Firefox sin cabeza. Se pueden configurar de la siguiente manera:

Para configurar Chrome sin cabeza, debemos iniciar Chrome con la marca –headless de la siguiente manera:

capabilities: {
   'browserName': 'chrome',
   'chromeOptions': {
      'args': [“--headless”, “--disable-gpu”, “--window-size=800,600”]
   }
},

Para configurar Firefox sin cabeza, necesitamos iniciar Firefox con el –headless marcar de la siguiente manera:

capabilities: {
   'browserName': 'firefox',
   'moz:firefoxOptions': {
      'args': [“--headless”]
   }
},

Configuración de varios navegadores para realizar pruebas

También podemos realizar pruebas en varios navegadores. Para esto, necesitamos usar la opción de configuración multiCapabilities de la siguiente manera:

multiCapabilities: [{
   'browserName': 'chrome'
},{
   'browserName': 'firefox'
}]

¿Qué marco?

Dos marcos de prueba BDD (desarrollo impulsado por el comportamiento), Jasmine y Mocha, son compatibles con Protractor. Ambos marcos se basan en JavaScript y Node.js. Estos marcos proporcionan la sintaxis, el informe y el andamiaje necesarios para escribir y administrar las pruebas.

A continuación, vemos cómo podemos instalar varios marcos:

Marco de jazmín

Es el marco de prueba predeterminado para Transportador. Cuando instale Protractor, obtendrá la versión Jasmine 2.x con él. No es necesario que lo instalemos por separado.

Marco moca

Mocha es otro marco de prueba de JavaScript que básicamente se ejecuta en Node.js. Para usar Mocha como nuestro marco de prueba, necesitamos usar la interfaz BDD (desarrollo impulsado por el comportamiento) y las afirmaciones de Chai con Chai As Promised. La instalación se puede realizar con la ayuda de los siguientes comandos:

npm install -g mocha
npm install chai
npm install chai-as-promised

Como puede ver, la opción -g se usa al instalar mocha, es porque hemos instalado Protractor globalmente usando la opción -g. Después de instalarlo, necesitamos requerir y configurar Chai dentro de nuestros archivos de prueba. Se puede hacer de la siguiente manera:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;

Después de esto, podemos usar Chai As Promised como tal:

expect(myElement.getText()).to.eventually.equal('some text');

Ahora, necesitamos establecer la propiedad del marco en mocha del archivo de configuración agregando marco: 'mocha'. Las opciones como 'reportero' y 'lento' para mocha se pueden agregar en el archivo de configuración de la siguiente manera:

mochaOpts: {
   reporter: "spec", slow: 3000
}

Marco de pepino

Para usar Cucumber como nuestro marco de prueba, necesitamos integrarlo con Transportador con la opción de marco custom. La instalación se puede realizar con la ayuda de los siguientes comandos

npm install -g cucumber
npm install --save-dev protractor-cucumber-framework

Como puede ver, la opción -g se usa al instalar Cucumber, es porque hemos instalado Protractor globalmente, es decir, con la opción -g. A continuación, debemos establecer la propiedad del marco encustom del archivo de configuración agregando framework: 'custom' y frameworkPath: 'Protractor-cucumber-framework' al archivo de configuración llamado cucumberConf.js.

El código de muestra que se muestra a continuación es un archivo cucumberConf.js básico que se puede usar para ejecutar archivos de características de pepino con Transportador -

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();
   }
};