2013-05-24 9 views
5

Próbuję uruchomić test selenu przy użyciu PHPUnit. Pierwszą rzeczą, którą robię, jest wypróbowanie funkcji logowania, działa to idealnie, ale chcę uruchomić funkcję sprawdzania informacji na stronie po zalogowaniu, ale otwiera nową przeglądarkę zamiast kontynuować w bieżącym oknie przeglądarki. Powodem tego jest problem, ponieważ strona jest skonfigurowana do usuwania uwierzytelniania logowania, gdy okno jest zamknięte, więc jeśli użyjesz $ this-> url(), aby przejść do strony, daje to błąd, który muszę zalogować. To jest teraz mój kod, uruchamia przeglądarkę i uruchamia funkcję, aby przetestować formularz logowania, następnie zamyka przeglądarkę, otwiera nową i uruchamia sprawdzanie łącza. To oczywiście powoduje błąd z powodu błędu uwierzytelniania, ponieważ okno zostało zamknięte. Mogłem uruchomić wszystkie testy w jednej funkcji, ale to naprawdę niechlujne kodowanie i chcę tego uniknąć. Ktoś wie, jak rozwiązać ten problem?Jak uruchomić test selekcji PHPUnit bez konieczności uruchamiania nowego okna przeglądarki dla każdej funkcji?

<?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

możesz dostarczyć niektóre fragmenty kodu, którego używasz, który jest przyczyną problemów? – Dirk

+0

Zaktualizowałem wpis – user1593846

Odpowiedz

4

okej więc myślę, że można po prostu wywołać funkcję bezpośrednio z innej funkcji tak:

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

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

public function Three() 
{ 
#code 
} 

i tak dalej, to po prostu uruchomi następną funkcję bez nowej przeglądarki, jednak jeśli zawiedzie gdziekolwiek w jakimkolwiek teście, cały test jest zatrzymywany, więc informacja zwrotna nie będzie tak dobra, jak poszczególne testy.

1

dokonać assekcji w jednej funkcji, ponieważ jest to test funkcjonalny. Jestem nowy PHPUnit i selen też, ale ja z powodzeniem przetestować wszystko w jednym jak ten:

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

Możesz wywołać PHPUnit_Extensions_SeleniumTestCase :: shareSession (true), aby włączyć ponowne użycie okna przeglądarki.

W manual mówi:

Od Selen 1.1.1, funkcja eksperymentalna jest wliczone pozwalając użytkownikowi podzielić sesję między testami. Jedynym obsługiwanym przypadkiem jest udostępnianie sesji między wszystkimi testami, gdy używana jest jedna przeglądarka. Wywołaj PHPUnit_Extensions_SeleniumTestCase :: shareSession (true) w pliku bootstrap, aby umożliwić udostępnianie sesji. Sesja zostanie zresetowana w przypadku nieskutecznych testów (nieudanych lub niekompletnych); to użytkownik musi unikać interakcji między testami, resetując pliki cookie lub wylogowując się z testowanej aplikacji (za pomocą metody tearDown()).

+1

Umm ... Pomyślałem, że to zadziałało, ale teraz otwiera nowe okna. Nie jestem już pewien, czy to działa, czy nie. – jarnoan

+0

To samo doświadczenie tutaj. :( – Ben

+0

... ale właśnie to wymyśliłem :) – Ben

6

Aby udostępnić sesji przeglądarki w Selenium2TestCase należy ustawić sessionStrategy => 'shared' w swojej początkowej konfiguracji przeglądarki:

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

Alternatywa (domyślnie) jest 'isolated'.

+0

To zadziałało idealnie dla mnie i jest o wiele mniej hackowate niż niektóre z dostępnych rozwiązań! – user1578653

+0

Tak, byłem bardzo podekscytowany, aby go znaleźć :) Wreszcie przed krzywą na raz lol. – Ben

1

elegancki sposób ustawić sesję udostępniony jest użycie phpunit za setUpBeforeClass() metody:

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