WordPress y Codeception

¿Quieres patrocinar?

¿Quieres aparecer aquí? Si quieres patrocinar este blog, ponte en contacto conmigo a través de este formulario

Codeception para WordPress: Tests de aceptación con WebDriver y Selenium

En la entrada anterior veíamos cómo podíamos realizar tests de aceptación en elementos generados dinámicamente con JavaScript a través de PhantomJS. Pero aún así esta ejecución se hacía en segundo plano, y la salida de los tests era por la terminal.

En este post vamos a ir un paso más allá y esa emulación la vamos a hacer directamente en el navegador, así podremos comprobar en directo el resultado de nuestros tests. Esto añade un poco más de tiempo de ejecución de los tests respecto a PhantomJS, pero nos ofrece un beneficio claro al poder visualizar la emulación en un navegador.

Instalación de WebDriver y Selenium

Al igual que vimos en la entrada anterior, lo primero es instalar WebDriver (tienes más info en la documentación oficial):

composer require --dev codeception/module-webdriver

Ahora en el archivo acceptance.suite.yml, configuramos WebDriver, y para este ejemplo utilizaremos chrome. Aprovecho para añadir unas líneas (capabilities) por si en local tienes un certificado SSL autofirmado, que podría ocasionarte problemas:

# Codeception Test Suite Configuration
#
# Suite for acceptance tests.
# Perform tests in browser using the WebDriver or PhpBrowser.
# If you need both WebDriver and PHPBrowser tests - create a separate suite.

actor: AcceptanceTester
modules:
    enabled:
        - WebDriver:
            url: http://localhost/myapp
            browser: chrome
            capabilities:
                acceptSslCerts: true
                acceptInsecureCerts: true
        - \Helper\Acceptance
    step_decorators: ~       

El siguiente paso es que te descargues Selenium Server y ChromeDriver. Necesitarás también tener instalado Java.

Coloca el Selenium Server en una carpeta donde puedas ejecutarlo globalmente y en una nueva pestaña de la terminal lanza el server en segundo plano. Sustituye ./chromedriver por la ruta donde lo hayas instalado y las xxx.xx por la versión que te hayas descargado:

java -Dwebdriver.chrome.driver=./chromedriver -jar ./selenium-server-standalone-3.xxx.xx.jar --debug

Esto tendrás que hacerlo siempre antes de lanzar los tests, y quedará en segundo plano Selenium Server a la espera de lanzar los tests. Vamos a lanzar el mismo tests que vimos en el ejemplo de PhantomJS:

<?php

use Step\Acceptance\Login;

class WriteCest {
    public function _before( Step\Acceptance\Login $I ) {
        $I->login( 'admin', 'admin' );
    }

    public function tryToWriteAPost( AcceptanceTester $I ) {
        $I->wantTo( 'Probar si veo Entradas' );
        $I->see( 'Entradas', '.wp-menu-name' );
        $I->amOnPage( '/wp-admin/post-new.php' );
        $I->fillField( '#post-title-0', 'Título de prueba' );
        $I->click( 'Publicar' );
        $I->click( 'Publicar' );
        $I->wait(1);
        $I->see( 'Publicada', 'div.editor-post-publish-panel__header-published' );
    }
}

Simplemente lanza los tests y verás cómo te abre una ventana con la aplicación de chrome, y ejecuta la navegación paso por paso: Ir a la página de login, rellenar el formulario, ir a la pagina de añadir nuevo post, rellenar el título y hacer click en Publicar.

codecept run --steps