2010-11-17 5 views
37

Quelqu'un sait-il comment utiliser Selenium 2 avec Phpunit? Y a-t-il des échantillons de sélénium 2 en PHP?Selenium 2 (WebDriver) et Phpunit?

+11

+1 C'est une très bonne question. Je voulais le poser il y a quelque temps, car, désolé de le dire, la page Selenium n'est pas très conviviale pour les utilisateurs de PHP. Il y a beaucoup de buzz sur WebDriver ces derniers temps, mais je n'ai pas encore vu ces deux-là en action. – takeshin

+3

PHPUnit prend en charge Selenium2 à partir de la version 3.6 Pour plus de détails, voir http://www.phpunit.de/manual/3.6/en/selenium.html#selenium.selenium2testcase – Potherca

Répondre

18

mise à jour rapide: phpunit ne supporte maintenant Sélénium 2


Au moment de l'écriture, PHPUnit ne supporte pas Sélénium 2.

php-webdriver de facebook permet à l'API complète WebDriver à appeler de PHP d'une manière élégante. Pour citer:

La plupart des clients doivent d'abord être lu le protocole pour voir ce qui est possible , étudier alors le client lui-même pour voir comment l'appeler. Ce espère éliminer la dernière étape.

Il est utilisé en démarrant le serveur Selenium 2, qui fournit l'interface à localhost:4444/wd/hub.

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

puis d'exécuter le code de test PHP, qui appelle cette interface. Par exemple:

<?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(); 

Le WebDriver API est mis en correspondance avec les méthodes PHP, comparer appelant click sur element dans l'exemple avec l'élément/cliquez sur appel API dans la documentation.

Le code de test peut ensuite être enveloppé dans des tests phpUnit réguliers.

Ce n'est pas un support natif de phpUnit, mais c'est une approche assez robuste.

+0

Merci de pointer vers cet emballage facebook. Il semble que beaucoup de commandes ne fonctionnent pas comme sendKeys – Adil

+0

Hey Adil! Vous voulez dire que beaucoup de commandes ne fonctionnent pas dans les _autres implémentations PHP selenium_, non? C'est juste une autre raison d'utiliser celui-ci, l'architecture le rend intrinsèquement complet. – cmc

+1

@cmc: Il n'y a rien dans @ php-webdriver @ qui le rendrait "intrinsèquement complet" (il semble assez facile d'ajouter de nouvelles commandes). Il existe une liste statique de commandes acceptées (voir les fonctions @getMethod() @ dans les différentes classes). – Tgr

3

PHPUnit Selenium code d'intégration vit comme un projet distinct dans github, autant que je peux voir qu'il ne supporte pas Selenium 2, donc la réponse à votre question serait - Non, vous ne pouvez pas utiliser Selenium 2 avec PHPUnit.

Mais vous pouvez cloner l'arbre source et le faire fonctionner avec Sélénium 2.

+0

Pour le moment, je me suis contenté d'utiliser Java pour les tests. Le Dbunit de Java est beaucoup plus rapide que le port PHP. –

+1

La prise en charge du sélénium est fournie avec PHPUnit: http://www.phpunit.de/manual/3.6/en/selenium.html – bcoughlan

8

s'il vous plaît consulter le http://code.google.com/p/php-webdriver-bindings/. C'est une bibliothèque PHP qui communique avec le serveur Selenium Webdriver en utilisant JsonWireProtocol. Ceci est la première version, mais cela fonctionne.

+2

Il existe également cette autre [Php binding library] (https://github.com/chibimagic/WebDriver- PHP). Les deux bibliothèques semblent être plutôt actives en ce moment. –

+0

PHPUnit possède sa propre bibliothèque Selenium qui reproduit mieux les liaisons de pilotes Web JsonWireProtocol (http://www.phpunit.de/manual/3.6/en/selenium.html). Si vous voulez utiliser celui de WebDriver, celui de Facebook est plus activement supporté. – bcoughlan

+0

Dernière mise à jour depuis deux ans. Utilisez plutôt le paquet [instaclick/webdriver] (https://packagist.org/packages/instaclick/php-webdriver)! – falsch

1

Les liaisons phpunit webdriver sont hébergées sur google code. Il y a quelque chose que nous devons comprendre au-delà de cela.

  1. PHPUnit doit être installé. (Soit via le paquetage PEAR, soit en le téléchargeant et l'installant manuellement)
  2. PHP IDE tel que Eclipse PDT doit être téléchargé et installé.
  3. serveur Selenium-autonome doit être en cours d'exécution lors de l'exécution du test Selenium WebDriver
+6

Pourquoi un IDE doit-il être installé? –

2

Nous avons créé une bibliothèque pour cela, j'espère que ça aide. Il utilise également le protocole JSON Wire mais nous avons cherché à le rendre compatible avec les exemples d'autres langages, donc la syntaxe serait très similaire. Voici le lien: https://github.com/Nearsoft/PHP-SeleniumClient

Si vous aimez, partagez, l'améliorer ou de la fourche it :)

Cordialement, Marc.

1

Je Recommenéd l'utilisation de Menta, un cadre Sélénium 2 qui exige WebDriver. Les deux paquets sont compatibles avec PSR-0, donc vous pouvez les utiliser avec Composer. Vous pouvez configurer le sélénium avec le fichier phpunit.xml. Voici un exemple

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

Le fichier bootstrap lit les variables de configuration de testing.selenium. *, De sorte que vous pouvez facilement définir de nouvelles variables.

<?php 

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

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

Maintenant, vous pouvez facilement mettre en œuvre vos testcases. Voici un exemple

<?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()); 
    } 
} 

Le paquet Menta ont également deux fichiers de démonstration, situés here

0

Oui, Selenium 2 (WebDriver) et PHPUnit tests est simple. Mais puis-je vous donner des conseils que le premier vous devriez être essayer Selenium IDE parce que vous devez vous attendre à selenium command. Si vous vous attendez à Selenium command si oui selenium 2 (Webdriver) et PHPUnit test sera plus simple pour vous.

Vous pouvez essayer selenium IDE tutoriels sur here et vous pouvez apprendre selenium 2 (Webdriver) and PHPUnit à here.

1

Aujourd'hui a fait un saut en profondeur dans Selenium et phpunit. Il est possible et vous pouvez trouver quelques exemples et instructions ici: http://phpunit.de/manual/current/en/selenium.html

Créateur de PHPUnit a obtenu quelques beaux exemples de l'api. Avec un peu d'expérimentation et en lisant le message d'erreur, vous vous entendrez. Havn't trouvé moi-même une grande bibliothèque.

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

dernier avec un tutoriel de Nettuts qui vous aide sur les bases: http://net.tutsplus.com/tutorials/php/how-to-use-selenium-2-with-phpunit/

+0

lien mort: https://phpunit.de/manual/current/fr/selenium.html –

0

Je travaille sur selenium2php. J'ai trop de tests pour Selenium1 enregistrés avec Selenium IDE. Maintenant, il convertit les tests html en Selenium2. En fait, pour PHPUnit_Extensions_Selenium2TestCase. Je vais implémenter plus de commandes.

5

Actuellement (2017) Je recommande d'utiliser php-webdriver, ce qui est AFAIK la liaison de langage PHP complète la plus complète pour interagir avec Selenium WebDriver.

Cette bibliothèque a été réécrite en 2014 pour prendre en charge Selenium 2, et son API est principalement basée sur les liaisons Java WebDriver officielles. Cela signifie que vous pouvez également tirer parti des exemples de code écrits en Java, car ils peuvent généralement être simplement suivis en PHP. Il est également écrit d'une manière OOP moderne et suit les espaces de noms standard PSR-4 et les normes de codage PSR-2.

Je recommande cette bibliothèque sur phpunit-selenium - comme elle a été conçue à l'origine pour le sélénium 1 (bien qu'elle supporte aujourd'hui le sélénium 2) et son API est étroitement liée à PHPUnit. Il ne prend pas en charge certaines fonctionnalités de WebDriver et n'est pas à jour avec upcomin W3C WebDriver specification.

Php-WebDriver est d'autre part bibliothèque indépendante, mais son intégration avec PHPUnit est assez simple - ou vous pouvez utiliser les outils existants comme Steward, qui comprend toute l'intégration de PHPUnit et de fournir aussi belle couche de commodité et par exemple. permettre de simplement exécuter plusieurs tests en parallèle (sans avoir besoin d'autres outils comme paratest).

Il existe également d'autres options d'intégration de structure de test mentionnées sur le project homepage.

+0

Comme je l'ai récemment réessayé le phpunit-sélénium semi-officiel pour trouver les docs manquent encore. Cependant, faire fonctionner celui-ci de manière fiable est également un défi. –

Questions connexes