2012-10-02 19 views
5

Escribí un caso de prueba con la extensión PHPUnit Selenium2TestCase. Funciona bien, pero no puedo entender cómo ejecutar automáticamente esta prueba en varios navegadores.Extensión PHPUnit Selenium 2 (webdriver) y varios navegadores

Hay un método setBrowser() que solo funciona en el método setUp(). Pensé en algo como esto:

/** 
* @dataProvider browsers 
*/ 
public function loginTest($browser) { 
    $this->setBrowser($browser); 
    // tests... 
} 

Pero no funciona. Trate de ejecutar el navegador predeterminado (Propably tengo un pequeño lío con Safari, la última vez usa Firefox)

RuntimeException: Safari could not be found in the path! 
Please add the directory containing ''Safari'' to your PATH environment 
variable, or explicitly specify a path to Safari like this: 
*safari /blah/blah/Safari 

PS. SeleniumTestCase (no basado en webdriver) proporciona una configuración xml donde podemos especificar navegadores. Selenium2TestCase no lo admite.

Cualquier sugerencia es bienvenida. Gracias. Marcin

Respuesta

2

La solución para esto realmente depende de cómo se ve el archivo de datos. Si pudieras publicar eso, podríamos ayudarte más.

Por el momento lo asumo, ya que phpunit por naturaleza es un marco de prueba de unidades individualizado que no intenta ejecutar múltiples navegadores simultáneamente, pero solo desea reservar la opción para cambiar los navegadores como veas conveniente.

Tienes razón en que deberías estar usando setBrowser en setUp. Cuando se ejecuta PHPUnit siempre ejecutará setUp primero y tearDown() al último. Una buena práctica aquí es crear su propia clase personalizada de prueba-unidad donde puede personalizar estos métodos.

class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase { 
    public $browser = "firefox"; 
    public function setUp() { 
     $this->setBrowser("*".$browser); 
    } 
} 

Ahora, cuando usted está escribiendo una prueba de ampliar su clase de prueba personal y establecer el navegador a tal efecto

class newTest extends customUnitTest { 
    $this->browser = "safari"; 
    public function testBlah { 
     blah blah... 
    } 
} 

de instalación se ejecuta en ejecución y que se tire en la variable navegador. De forma predeterminada obtendrá Firefox, pero si algunas pruebas se prueban de forma más adecuada en otros navegadores, tiene esa opción.

Si está buscando poder cambiar todos los navegadores en todas las pruebas al mismo tiempo, debería considerar asignar el valor del navegador en función de una variable de entorno.

class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase { 
    try { 
     public $browser = getenv("SELENIUM_BROWSER"); 
    } catch (Exception $e) { 
     public $browser = "firefox"; 
    } 
    public function setUp() { 
     $this->setBrowser("*".$browser); 
    } 
} 

Con esta configuración podemos cambiar el navegador para cada prueba que no ha modificable el navegador en sí mismo cambiando la variable de entorno SELENIUM_BROWSER. De esta forma, podemos ejecutar el mismo código en diferentes servidores con diferentes navegadores predeterminados sin tener que volver a escribir nada.

Tenga en cuenta que la herencia múltiple no es una buena práctica. Puede llevar a código frágil e incluso a amenazas de seguridad si no se aplican los métodos/variables correctamente. Sin embargo, en este caso es útil porque podemos definir los métodos de framework PHPUnit como queramos, y obtenemos todos los métodos base de selenio dentro de nuestra prueba. Así que para ejecutar un método de selenio por defecto que acabamos de escribir

$this->open("www.google.com"); 

Este es un método muy diferente que el enfoque general de la asignación de selenio a un objeto, como la prueba de que escribe es el objeto de selenio, pero parece más php apropiada , especialmente para este caso de uso.

+0

Bien, incluso si getenv y herencia no son soluciones fáciles. De todos modos, muestra lo que puedo hacer. Gracias. PS. Espero que la implementación de Selenium2TestCase haya cambiado desde que escribí el problema ... o lo haré. –

4

algo como esto

class WebTestCase extends \application\components\test\ExWebTestCase 
    { 
     // default params 
     public $parameters = array(
      'host'       => 'localhost', 
      'port'       => 4444, 
      'seleniumServerRequestsTimeout' => 30000, 
      'timeout'      => 30000, 
    ); 

     // list of browsers with per-browserconfig 
     public static $browsers = array(
      array(
       'browserName' => 'firefox', 
     ), 
      array(
       'browserName' => 'chrome', 
     ), 
      array(
       'browserName' => 'safari', 
     ), 
      array(
       'browserName' => 'internet explorer', 
       'host' => 'some IP of VirtualBox with IE' 
     ) 
    ); 
    } 
2

Para ejecutar el registro de entrada múltiple navegador este enlace:

http://phpunit.de/manual/current/en/selenium.html ejemplo 17.4 (PHPUnit 3.7) Si ur ejecutar el caso de prueba en localhost, utilice 'anfitrión' => 'localhost'. La función setBrowser() no es necesaria.

+0

Como recuerdo, funciona para SeleniumTestCase y no para Selenium2TestCase. –

1

El usuario debe usar la propiedad $ browsers para definir múltiples navegadores, como se define arriba.

Cuestiones relacionadas