2010-11-17 13 views
37

Kann jemand Selenium 2 mit Phpunit verwenden? Gibt es Selen 2-Beispiele in PHP?Selen 2 (WebDriver) und Phpunit?

+11

+1 Dies ist eine sehr gute Frage. Ich wollte es vor einiger Zeit fragen, denn leider ist die Selenium-Seite nicht sehr freundlich für PHP-Benutzer. In letzter Zeit gibt es viel über WebDriver, aber ich habe diese beiden noch nicht in Aktion gesehen. – takeshin

+3

PHPUnit unterstützt Selenium2 ab Version 3.6 Details siehe http://www.phpunit.de/manual/3.6/en/selenium.html#selenium.selenium2testcase – Potherca

Antwort

18

Schnell Update: phpunit jetzt Selen 2

unterstützt

Zum Zeitpunkt des Schreibens, unterstützt PHPUnit Selen nicht 2.

php-webdriver von facebook ermöglicht die komplette WebDriver API von PHP auf elegante Weise aufgerufen werden. Zu zitieren:

Die meisten Kunden benötigen Sie zunächst das Protokoll zu lesen, um zu sehen, was möglich, dann studieren Sie den Client selbst zu sehen, wie es nennen. Diese hofft, den letzteren Schritt zu beseitigen.

Es wird verwendet, indem der Selenium 2-Server gestartet wird, der die Schnittstelle unter localhost:4444/wd/hub bereitstellt.

/usr/bin/java -jar /path/to/selenium-server-standalone-2.7.0.jar 

Dann läuft der PHP-Testcode, der diese Schnittstelle aufruft. Zum Beispiel:

<?php 

require '/path/to/php-webdriver/__init__.php'; 

$webdriver = new WebDriver(); 

$session = $webdriver->session('opera', array()); 
$session->open("http://example.com"); 
$button = $session->element('id', 'my_button_id'); 
$button->click(); 
$session->close(); 

Die WebDriver API zu PHP Methoden abgebildet wird, vergleichen click auf element im Beispiel mit dem Elemente Aufruf/Klick-API-Aufruf in der Dokumentation.

Der Testcode kann dann in regulären phpUnit-Tests verpackt werden.

Dies ist keine native phpUnit-Unterstützung, aber es ist ein ziemlich robuster Ansatz.

+0

Vielen Dank, dass Sie auf diesen Facebook-Wrapper hingewiesen haben. Es scheint, als ob viele Befehle nicht funktionieren, wie sendKeys – Adil

+0

Hey Adil! Sie meinen, viele Befehle funktionieren nicht in den anderen PHP Selenimplementierungen, oder? Das ist nur ein weiterer Grund, dieses zu verwenden, die Architektur macht es von Natur aus komplett. – cmc

+1

@cmc: Es gibt nichts in @ php-webdriver @, das es "inhärent vollständig" machen würde (es scheint ziemlich einfach zu sein, neue Befehle hinzuzufügen). Es gibt eine statische Liste der akzeptierten Befehle (siehe @getMethod() @ -Funktionen in den verschiedenen Klassen). – Tgr

3

PHPUnit Selenium Integration Code lebt als separates Projekt in github, soweit ich sehe, unterstützt es nicht Selenium 2, also die Antwort auf Ihre Frage wäre - Nein, Sie können Selenium 2 nicht mit PHPUnit verwenden.

Aber Sie können den Quellbaum klonen und es mit Selen 2.

+0

Zur Zeit habe ich mich auf Java für Tests eingestellt. Javas Dbunit ist sowieso viel schneller als der PHP-Port. –

+1

Selenium-Unterstützung kommt mit PHPUnit: http://www.phpunit.de/manual/3.6/en/selenium.html – bcoughlan

8

bitte im http://code.google.com/p/php-webdriver-bindings/ aussehen arbeiten. Dies ist eine PHP-Bibliothek, die über JsonWireProtocol mit dem Selenium-Webdriver-Server kommuniziert. Dies ist eine frühe Version, aber es funktioniert.

+2

Es gibt auch diese andere [Php-Bindungsbibliothek] (https://github.com/chibimagic/WebDriver- PHP). Beide Bibliotheken scheinen im Moment ziemlich aktiv zu sein. –

+0

PHPUnit hat eine eigene Selenium-Bibliothek, die die JsonWireProtocol-Webdriver-Bindungen besser nachahmt (http://www.phpunit.de/manual/3.6/en/selenium.html). Wenn Sie den WebDriver nutzen wollen, wird Facebooks aktiver unterstützt. – bcoughlan

+0

Zuletzt aktualisiert für zwei Jahre. Verwenden Sie stattdessen das Paket [instaclick/webdriver] (https://packagist.org/packages/instaclick/php-webdriver). – falsch

1

phpunit webdriver bindings werden auf google code gehostet. Es gibt etwas, das wir darüber hinaus verstehen müssen.

  1. PHPUnit muss installiert sein. (Entweder über PEAR-Paket oder manuell herunterladen und installieren)
  2. PHP IDE wie Eclipse PDT muss heruntergeladen und installiert werden.
  3. Selen-Stand-Alone-Server hat ausgeführt werden, während die WebDriver Selenium Test Ausführung
+6

Warum muss eine IDE installiert werden? –

2

Wir haben eine Bibliothek dafür erstellt, ich hoffe, es hilft. Es verwendet auch das JSON-Wire-Protokoll, aber wir wollten es mit den Beispielen aus anderen Sprachen kompatibel machen, so dass die Syntax sehr ähnlich wäre. Hier ist der Link: https://github.com/Nearsoft/PHP-SeleniumClient

Wenn Sie es mögen, teilen Sie es, sie verbessern oder es Gabel :)

Grüße, Mark.

1

I recommened die Verwendung von Menta, ein Selen 2 Rahmen der WebDriver erfordert. Beide Pakete sind PSR-0-kompatibel, daher können Sie sie mit Composer verwenden. Sie können Selenium mit der phpunit.xml konfigurieren. Hier ein Beispiel

<phpunit bootstrap="tests/bootstrap.php" 
     backupGlobals="false" backupStaticAttributes="false" 
     strict="true" verbose="true"> 
    <php> 
     <var name="testing.selenium.seleniumServerUrl" value="http://localhost:4444/wd/hub" /> 
     <var name="testing.selenium.browser" value="firefox" /> 
     <var name="testing.selenium.windowPosition" value="0,0" /> 
     <var name="testing.selenium.windowSize" value="1280x1024" /> 
     <var name="testing.selenium.windowFocus" value="1" /> 
     <var name="testing.selenium.timeoutImplicitWait" value="10000" /> 
    </php> 
    <testsuites> 
     <testsuite name="Integrationstests"> 
      <directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">tests/integration</directory> 
     </testsuite> 
    </testsuites> 
    <logging> 
     <log type="junit" target="build/logs/junit.xml"/> 
    </logging> 
</phpunit> 

Die Bootstrap-Datei liest die Konfigurationsvariablen von testing.selenium. * So können neue Variablen festlegen.

<?php 

\Menta_ConfigurationPhpUnitVars::addConfigurationFile(__DIR__ . '/../phpunit.xml'); 

$configuration = \Menta_ConfigurationPhpUnitVars::getInstance(); 
\Menta_SessionManager::init(
    $configuration->getValue('testing.selenium.seleniumServerUrl'), 
    $configuration->getValue('testing.selenium.browser') 
); 

Jetzt können Sie einfach Testcases implementieren. Hier ist ein Beispiel

<?php 

namespace tests\integration; 

use WebDriver\LocatorStrategy; 

class TestSearch extends \PHPUnit_Framework_TestCase 
{ 
    public function testGoogle() 
    { 
     $session = \Menta_SessionManager::getSession(); 
     $session->open('http://www.google.de'); 
     $element = $session->element(LocatorStrategy::NAME, 'q'); 
     $this->assertTrue($element->displayed()); 
    } 
} 

Das Menta Paket haben auch zwei Demo-Dateien, befindet here

0

Ja, Selenium 2 (WebDriver) und PHPUnit tests einfach. Aber ich möchte Ihnen den Rat geben, dass Sie zuerst versuchen sollten Selenium IDE, weil Sie in selenium command erwarten müssen. Wenn Sie in Selenium command erwarten, wenn so selenium 2 (Webdriver) und PHPUnit test wird einfacher für Sie sein.

Sie können versuchen selenium IDE Tutorials auf here und Sie können lernen selenium 2 (Webdriver) and PHPUnit um here.

1

Heute ging ein tiefgreifender Sprung in Selenium und phpunit. Es ist möglich, und Sie können einige Beispiele und Anleitungen hier finden: http://phpunit.de/manual/current/en/selenium.html

Schöpfer von phpunit bekam ein paar schöne Beispiele für die api. Mit ein wenig experimentieren und die Fehlermeldung lesen, werden Sie miteinander auskommen. Ich habe auch keine großartige Bibliothek gefunden.

https://github.com/sebastianbergmann/phpunit-selenium/blob/master/Tests/Selenium2TestCaseTest.php

Wie zuletzt ein Tutorial mit von Nettuts, die Sie an den Grundlagen hilft: http://net.tutsplus.com/tutorials/php/how-to-use-selenium-2-with-phpunit/

+0

dead link: https://phpunit.de/manual/current/en/selenium.html –

0

ich auf selenium2php arbeiten. Ich habe zu viele Tests für Selenium1, die mit Selenium IDE aufgezeichnet wurden. Jetzt konvertiert es HTML-Tests in Selen2. Eigentlich für PHPUnit_Extensions_Selenium2TestCase. Ich werde mehr Befehle implementieren.

5

Derzeit (2017) empfehle ich die Verwendung von php-webdriver, was ist AFAIK die meisten Funktionen vollständige PHP-Sprachbindung für die Interaktion mit Selenium WebDriver.

Diese Bibliothek wurde 2014 neu geschrieben, um Selenium 2 zu unterstützen, und ihre API basiert hauptsächlich auf den offiziellen Java WebDriver-Bindungen. Dies bedeutet, dass Sie auch Codebeispiele nutzen können, die in Java geschrieben wurden, da sie normalerweise einfach in PHP befolgt werden können. Es ist auch in einer modernen OOP-Art geschrieben und folgt Standard-PSR-4-Namespaces und auch PSR-2-Kodierungsstandards.

Ich würde diese Bibliothek über phpunit-selenium empfehlen - wie es ursprünglich für Selenium 1 entworfen wurde (obwohl es Selenium 2 heutzutage unterstützt) und seine API stark an PHPUnit gebunden ist. Es unterstützt auch nicht einige der WebDriver-Funktionen und ist nicht up-to-date mit upcomin W3C WebDriver specification.

Php-WebDriver ist auf der anderen Seite unabhängige Bibliothek, aber seine Integration mit PHPUnit ist ganz einfach - oder Sie vorhandene Tools wie Steward verwenden können, die alle PHPUnit Integration umfasst und Convenience-Schicht und zB auch schön bereitzustellen. lassen Sie einfach mehrere Tests parallel laufen (ohne ein anderes Tool wie paratest).

Es gibt auch andere Test-Framework-Integrationsoptionen, die auf der project homepage erwähnt werden.

+0

Soeben habe ich gerade erst das halboffizielle phpunit-selen versucht, zu finden, dass die docs immer noch fehlen. Es ist jedoch auch eine Herausforderung, dieses zuverlässig zu machen. –