2013-05-24 5 views
5

Sto provando a eseguire un test case al selenio usando PHPUnit. E la prima cosa che faccio è provare la funzione di login, questo funziona perfettamente ma poi voglio eseguire una funzione per controllare le informazioni sulla pagina dopo il login ma apre un nuovo browser invece di continuare nella finestra corrente del browser. Il motivo per cui questo è un problema è dovuto al fatto che la pagina è impostata per rimuovere l'autenticazione di login quando la finestra è chiusa, quindi se usi $ this-> url() per andare alla pagina dà l'errore di cui ho bisogno per accedere. Questo è il mio codice adesso, avvia il browser ed esegue la funzione per testare il modulo di login, quindi chiude il browser, ne apre uno nuovo ed esegue il controllo del collegamento. Ciò comporta ovviamente un errore dovuto all'errore di autenticazione perché la finestra è stata chiusa. Potrei eseguire tutti i test in una funzione, ma questa è una codifica davvero sciatta e voglio evitarlo. Qualcuno sa come risolvere questo?Come si esegue un test di selenio PHPUnit senza eseguire una nuova finestra del browser per ogni funzione?

<?php 
    class TestMyTest extends PHPUnit_Extensions_Selenium2TestCase { 
     public function setUp() 
     { 
      $this->setBrowser("firefox"); 
      $this->setBrowserUrl("https://**************************"); 
     } 

     public function testLoginForm() 
     { 

      $this->url("login.php"); 
      $this->byLinkText('Forgot your password?'); 
      $form = $this->byCssSelector('form'); 
      $this->byName('username')->value('test'); 
      $this->byName('password')->value('1234'); 
      $form->submit(); 
     } 


     public function testCheckForMainMenueLinks() 
     { 
      $this->url("index.php"); 
      $this->byLinkText('Home'); 
      $this->byLinkText('Products'); 
      $this->byLinkText('About us'); 
      $this->byLinkText('Contact'); 
     } 
    } 
?> 
+0

Potete fornire alcuni frammenti del codice stai usando che sta causando i problemi? – Dirk

+0

Ho aggiornato il post – user1593846

risposta

4

Okej quindi credo che si può chiamare la funzione direttamente da un'altra funzione in questo modo:

public function testOne 
{ 
#code 
$this->Two(); 
} 

public function Two() 
{ 
#code 
$this->Three(); 
} 

public function Three() 
{ 
#code 
} 

e così via, questo eseguirà solo la funzione successiva senza un nuovo browser, tuttavia, se fallisce in qualsiasi test, l'intero test viene interrotto in modo che il feedback non sia buono come i singoli test.

1

fare assenze in una funzione perché questo è test funzionale. Sono nuovo di PHPUnit e selenio troppo, ma provo con successo tutto in uno come questo:

public function testAuth(){ 

$this->open('register.php&XDEBUG_SESSION_START=PHPSTORM'); 
$this->assertTextPresent('Register'); 
$this->type('name=email', "..."); 
$this->type('name=firstname', "..."); 
$this->type('name=lastname', "...");  
$this->type('name=password', "..."); 
$this->type('name=verifyPassword', "..."); 
$this->click("reg-butt"); 
$this->waitForPageToLoad("5000"); 
$this->assertTextPresent('Profile'); 
$this->open('logout.php'); 
$this->assertTextPresent('text from redirect page'); 
$this->open('login.php'); 
..... 

} 
0

È possibile chiamare PHPUnit_Extensions_SeleniumTestCase :: shareSession (true) per abilitare il riutilizzo della finestra del browser.

Nel manual si dice:

Da Selenio 1.1.1, una funzione sperimentale è incluso che permette all'utente di condividere la sessione tra i test. L'unico caso supportato è quello di condividere la sessione tra tutti i test quando viene utilizzato un singolo browser. Chiama PHPUnit_Extensions_SeleniumTestCase :: shareSession (true) nel file bootstrap per abilitare la condivisione della sessione. La sessione verrà ripristinata nel caso di test non riusciti (non riusciti o incompleti); spetta all'utente evitare le interazioni tra i test reimpostando i cookie o disconnettendosi dall'applicazione sotto test (con un metodo tearDown()).

+1

Umm ... Ho pensato che funzionasse ma ora continua ad aprire nuove finestre. Non sono più sicuro se questo funziona o no. – jarnoan

+0

La stessa esperienza qui. :( – Ben

+0

... ma l'ho appena capito :) – Ben

6

Per condividere le sessioni del browser in Selenium2TestCase, è necessario impostare sessionStrategy => 'shared' nella vostra configurazione iniziale del browser:

public static $browsers = array(
    array(
     '... 
     'browserName' => 'iexplorer', 
     'sessionStrategy' => 'shared', 
     ... 
    ) 
); 

L'alternativa (default) è 'isolated'.

+0

Questo ha funzionato perfettamente per me, ed è molto meno hacky di alcune delle soluzioni là fuori! – user1578653

+0

Sì, ero piuttosto eccitato di trovarlo :) Finalmente in anticipo sulla curva per una volta lol. – Ben

1

Un modo elegante per impostare la sessione condivisa è quello di utilizzare il metodo di setUpBeforeClass() PHPUnit:

public static function setUpBeforeClass() 
{ 
    self::shareSession(true); 
}