Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Selenium + PHP
Forum PHP.pl > Forum > PHP
Olimpia_ona
Witam, czy ktoś z Was pisał testy w selenium za pomocą PHP?

Mam zainstalowane selenium IDE, nagrany test, wyeksportowany do PHP. Uruchomiłam serwer Selenium RC i apacha (na xampp).
W wyeksportowanych plikach mam takie odniesienie:
1. require_once 'Testing/Selenium.php';

ale nigdzie na dysku nie mam takiego pliku jak Selenium.php

Mam też drugi plik wyeksportowany do PHP (PHPUnit), a w nim:

2. class Example extends PHPUnit_Extensions_SeleniumTestCase

po uruchomieniu dostaję komunikat:
Fatal error: Class 'PHPUnit_Extensions_SeleniumTestCase' not found

Czy ktoś może mi pomóc? Jak przygotować środowisko do testów selenium w php?
rocktech.pl
Witam.

W skrócie potrzebujesz PEAR + PHPUnit.

http://pear.php.net/manual/en/installation.getting.php
http://phpunit.de/manual/3.0/en/installation.html

  1. pear install pear.phpunit.de/PHPUnit
  2. pear install phpunit/PHPUnit_Selenium
Olimpia_ona
smile.gif to mam (chyba), bo mam już w katalogu

C:\xampp\php\PEAR\PHPUnit\Extensions\ pliki typu: Selenium2TestCase.php, SeleniumBrowserSuite.php itd.

mam już również

C:\xampp\php\PEAR\Testing a w nim Selenium.php

pliki wyeksportowane z Selenium IDE mam na D:\htdocs\selenium (tak mam ustawiony serwer, że pliki php uruchamiam np. http://localhost:8080/selenium/phplog.php)

jednak po uruchomieniu pliku phplog.php
  1. <?php
  2.  
  3. require_once 'Testing/Selenium.php';
  4.  
  5. class Example extends PHPUnit_Framework_TestCase
  6. {
  7. protected function setUp()
  8. {
  9. $this = new Testing_Selenium("*chrome", "http://172.18.96.34:8020/");
  10. $this->open("/");
  11. $this->type("id=dnn_ctr597_Login_Login_DNN_txtUsername", "syshost");
  12. $this->type("id=dnn_ctr597_Login_Login_DNN_txtPassword", "mojehaslo");
  13. $this->click("id=dnn_ctr597_Login_Login_DNN_cmdLogin");
  14. $this->waitForPageToLoad("30000");
  15. $this->assertEquals("Wyloguj", $this->getText("id=dnn_dnnLOGIN_loginLink"));
  16. }
  17. }
  18. ?>


dostaję komunikat: Fatal error: Cannot re-assign $this in D:\htdocs\selenium\phplog.php on line 10

po uruchomieniu pliku phplogunit.php

  1. <?php
  2.  
  3. class Example extends PHPUnit_Extensions_SeleniumTestCase
  4. {
  5. protected function setUp()
  6. {
  7. $this->setBrowser("*chrome");
  8. $this->setBrowserUrl("http://172.18.96.34:8020/");
  9. }
  10.  
  11. public function testMyTestCase()
  12. {
  13. $this->open("/");
  14. $this->type("id=dnn_ctr597_Login_Login_DNN_txtUsername", "syshost");
  15. $this->type("id=dnn_ctr597_Login_Login_DNN_txtPassword", "mojehaslo");
  16. $this->click("id=dnn_ctr597_Login_Login_DNN_cmdLogin");
  17. $this->waitForPageToLoad("30000");
  18. $this->assertEquals("Wyloguj", $this->getText("id=dnn_dnnLOGIN_loginLink"));
  19. }
  20. }
  21.  
  22.  
  23. ?>


dostaję komunikat: Fatal error: Class 'PHPUnit_Extensions_SeleniumTestCase' not found in D:\htdocs\selenium\phplogunit.php on line 3

i właśnie nie wiem, jakie pliki gdzie powinnam przerzucić, by to działało.
rocktech.pl
Hej.

Spróbuj tak, będzie śmigać.

  1. //echo get_include_path(); :)
  2. require_once 'Testing/Selenium.php';
  3.  
  4. class Example
  5. extends PHPUnit_Framework_TestCase
  6. {
  7.  
  8. protected function setUp()
  9. {
  10. $this->setBrowser("*chrome");
  11. $this->setBrowserUrl("http://172.18.96.34:8020/");
  12. }
  13.  
  14. function testClick()
  15. {
  16. $this->open("/");
  17. $this->type("id=dnn_ctr597_Login_Login_DNN_txtUsername", "syshost");
  18. $this->type("id=dnn_ctr597_Login_Login_DNN_txtPassword", "mojehaslo");
  19. $this->click("id=dnn_ctr597_Login_Login_DNN_cmdLogin");
  20. $this->waitForPageToLoad("30000");
  21. $this->assertEquals("Wyloguj", $this->getText("id=dnn_dnnLOGIN_loginLink"));
  22. }
  23.  
  24. }


Olimpia_ona
Teraz dostałam komunikat:
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in D:\htdocs\selenium\phplog1.php on line ...

gdzieś tam w internecie znalazłam poradę, że trzeba zmienić
require_once 'Testing/Selenium.php';
na
require_once 'PHPUnit/Autoload.php'; (aczkolwiek tu mam wątpliwość czy ten katalog PHPUnit może być na C: a plik phplog1.php na D: ?)

tak zrobiłam i po uruchomieniu skryptu phplog1.php mam po prostu pustą stronę, bez żadnego komunikatu, ale to chyba nie jest dobrze? Spodziewałam się raczej że nastąpi otworzenie przeglądarki Firefox i coś się zacznie testować, czy ja się mylę?
rocktech.pl
Generalnie potrzebujesz.

  1. //echo get_include_path(); <-- Zobacz tu!
  2. //require_once 'Testing/Selenium.php';
  3. require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
Olimpia_ona
rocktech chyba potrzebuję bardziej łopatologicznej podpowiedzi. W tej chwili mam taki plik

phplog2.php:
  1. <?php
  2. require_once 'PHPUnit/Autoload.php';
  3. require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
  4.  
  5. class Example extends PHPUnit_Framework_TestCase
  6. {
  7. protected function setUp()
  8. {
  9. $this->setBrowser("*chrome");
  10. $this->setBrowserUrl("http://172.18.96.34:8020/");
  11. }
  12.  
  13. function testClick()
  14. {
  15.  
  16. $this->open("/");
  17. $this->type("id=dnn_ctr597_Login_Login_DNN_txtUsername", "syshost");
  18. $this->type("id=dnn_ctr597_Login_Login_DNN_txtPassword", "mojehaslo");
  19. $this->click("id=dnn_ctr597_Login_Login_DNN_cmdLogin");
  20. $this->waitForPageToLoad("30000");
  21. $this->assertEquals("Wyloguj", $this->getText("id=dnn_dnnLOGIN_loginLink"));
  22. }
  23. }
  24. ?>



wywołuję go przez plik

  1. <?php
  2. exec('c:\xampp\php\phpunit.bat D:\htdocs\selenium\phplog2.php', $output);
  3. echo "<pre>". var_export($output,TRUE)."</pre>";
  4. ?>


a wynik jest taki:
  1. array (
  2. 0 => '.;C:\\xampp\\php\\PEARPHPUnit 3.6.12 by Sebastian Bergmann.',
  3. 1 => '',
  4. 2 => '',
  5. 3 => 'Fatal error: Call to undefined method Example::setBrowser() in D:\\htdocs\\selenium\\phplog2.php on line 10',
  6. )


mam też mały progress jeśli chodzi o plik phplogunit.php, którego kod wkleiłam w swojej drugiej wypowiedzi, tj. gdy go wywołuję poleceniem exec to firefox się odpala, coś się próbuje testować, ale w efekcie w oknie w którym wywołuję test mam wynik:
  1. rray (
  2. 0 => 'PHPUnit 3.6.12 by Sebastian Bergmann.',
  3. 1 => '',
  4. 2 => 'E',
  5. 3 => '',
  6. 4 => 'Time: 46 seconds, Memory: 3.25Mb',
  7. 5 => '',
  8. 6 => 'There was 1 error:',
  9. 7 => '',
  10. 8 => '1) Example::testMyTestCase',
  11. 9 => '',
  12. 10 => 'Invalid response while accessing the Selenium Server at \'http://localhost:4444/selenium-server/driver/\': Timed out after 30000ms',
  13. 11 => '',
  14. 12 => 'C:\\xampp\\php\\phpunit:46',
  15. 13 => '',
  16. 14 => 'FAILURES!',
  17. 15 => 'Tests: 1, Assertions: 0, Errors: 1.',
  18. )


wydaję mi się, że w tym drugim przypadku dostaję timedout, bo w przeglądarce wywołanej przez selenium server dla mojej strony pokazuję się komunikat o akceptacji ciasteczek, który przysłania całą stronę i być może to przeszkadza w kontynuowaniu testu, lecz dodanie polecenia $myVar->click("id=clickButton") nie powoduje zamknięcia tego okna.
skowron-line
Do firefoxa masz plugin którym możesz nagrać test
http://www.seleniumhq.org/projects/ide/
http://www.youtube.com/watch?v=88HDMkrCft4
Olimpia_ona
O tym pisałam w pierwszej wypowiedzi tj. że mam selenium IDE, nagrany test, wyeksportowany do PHP. Wyeksportowałam test do PHP, bo chciałabym go oprogramować, tj. zrobić w nim jakieś warunki, że jeśli jestem zalogowana to coś tam, ale nie mogę wywołać z selenium RC jednego podstawowego testu, który w IDE działa.
rocktech.pl
Cytat
mam też mały progress jeśli chodzi o plik phplogunit.php, którego kod wkleiłam w swojej drugiej wypowiedzi, tj. gdy go wywołuję poleceniem exec to firefox się odpala, coś się próbuje testować, ale w efekcie w oknie w którym wywołuję test mam wynik:


I tego przykładu się trzymaj. U mnie jest tak samo (Invalid response while accessing the Selenium Server at \'http://localhost:4444/selenium-server/driver/\': Timed out after XXXXXms',) jak tylko wywołam waitForPageToLoad(). Doczytałem, że to jest kwestia wersji Selenium Server vs PHP_Unit_Selenium. Powalcz trochę ja się poddałem chwilowo z natłoku innych zadań.

A i od razu dodam to co robisz nie jest łatwe do łopatologicznego wytłumaczenia smile.gif

  1. //spróbuj
  2. extends PHPUnit_Extensions_Selenium2TestCase
  3. //zamiast
  4. extends PHPUnit_Extensions_SeleniumTestCase
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.