7
votes

Garder le navigateur de sélénium ouvert avec phpunit / sélénium

Lorsque les tests échouent, le navigateur que les tests de sélénium fonctionnaient à la fermeture. Ceci n'est inutile lorsque vous essayez de déboguer. Je sais que j'ai la possibilité d'un tir d'écran lors de l'échec, mais cela n'aide pas sans tout le contexte. Avec le navigateur toujours disponible, je peux revêtir et inspecter ce qui se passait.

Y a-t-il un moyen de garder le navigateur ouvert même lorsque des affirmations d'échec ou des éléments ne sont pas trouvés?


0 commentaires

6 Réponses :


1
votes

Vous pouvez appeler selenium.stop () à la fin du test. Vous devez commenter cette ligne de code et vous assurer que votre objet sélénium n'est pas détruit à la fin du test. Cela gardera la fenêtre ouverte. La même question a été répondue à une réponse ici


0 commentaires

9
votes

le figuré au hasard plusieurs semaines plus tard.

Lorsque vous démarrez le serveur, utilisez l'option -BrowseSersersersReus à la fin. Cela gardera une session de navigateur ouverte dans les tests et ne fermez pas sur l'échec


2 commentaires

Exception de paramètre. Nous avons passé le paramètre principal «-BrowserSersersServeuse» mais aucun paramètre principal n'a été défini dans votre classe d'arg. / Code>. C'est ce qui se passe lorsque je démarre le serveur comme celui-ci - java -jar sélénium .. bla bla .jar -BrowsersersServeuse . Des idées pourquoi est-ce? Merci à l'avance :) (Je sais que c'est presque 7 ans, mais .. je dois essayer: D)


Même problème que Roma



1
votes

Concernant la réponse à propos de -BrowserRuse à https://stackoverflow.com/a/6904808/654026 , conserver L'esprit que vous devrez traiter de nettoyer les cookies entre les exécutions de tests. Sinon, vous avez peut-être difficile de déboguer des erreurs.


0 commentaires

0
votes

Après de longues heures d'essayage de créer une solution de contournement relativement propre, j'ai maintenant eu recours à un hack très sale, mais très facile. Le code source PHPUNIT \ sélénium n'est pas facile à remplacer, il aurait été agréable s'il y avait eu des usines utilisées pour créer les objets de session. J'ai essayé de pirater la création de l'objet par des objets primordiaux et proxyables, mais je ne pouvais toujours pas le faire fonctionner. Enfin, je ne voulais pas passer plus d'heures à ce sujet et je suis allé dans le chemin le plus facile et la plus sale, c'est-à-dire piraté le code des classes PHPUNIT_EXTENSITIONS_SELENIUM2TEDESCESSIONS_SELENIUMIUMIUNIUMIQUÉE. Dans PHPUNIT_EXTENSITIONS_SLENIUNIUM2ASTASE INSERTEZ UNE STATIQUE $ _Instance qui peut être utilisée pour vérifier s'il y avait une condition d'échec de test. Dans phpunit_extensions_selenium2estcase_session intercepté la méthode STOP () et interrogé le statut de la TESTCASE. Fonctionne comme un charme, mais sale sale sale.

phpunit_extensions_selenium2 Steestcase: p> xxx pré>

phpunit_extensions_selenium2tescription_session: p>

public function stop()
{
    if ($this->stopped || $this->hasFailedTests()) {
        return;
    }
    ....
}

private function hasFailedTests()
{
    $status = PHPUnit_Extensions_Selenium2TestCase::getInstance()->getStatus();
    return $status == \PHPUnit_Runner_BaseTestRunner::STATUS_ERROR
    || $status == \PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE;
}


0 commentaires

0
votes

Voici une solution plus propre. Remplacé toutes les classes impliquées dans la création de session. La classe de session est l'endroit où la session est fermée, la méthode STOP () devait être remplacée.

TODO: ajoutez des paramètres au comportement de contrôle, si et quand la fenêtre de navigateur est ouverte ou non. P>

5 CLASSES: PHPUNIT_EXTENSITIONS_SLENIUM2ESCASE, PHPUNIT_EXTENSITIONS_SELENIUM2TEDESCASE_DRIVER, PHPUNIT_EXTENSITIONS_SELENIUM2TEDSCASE_SESSIONSTREGY_SOLÉTSSEDRATTEGY_SOLÉTS_SESSELENIUM_SESOLÉSESSE Création de 2 fichiers bootstrap, 1 pour les sessions de navigateur partagées, 1 pour les sessions de navigateur isolées. Affichage de 1 exemple de test. P>

OkxSelenium2 StesteCase: P>

class Selenium02Test extends OkxSelenium2TestCase
{
    public static function setUpBeforeClass()
    {
    }

    public static function tearDownAfterClass()
    {
    }

    public function setUp()
    {
        $this->setHost('...');
        $this->setPort(4444);
        $this->setBrowser('chrome');
        //$this->setBrowser('firefox');
        $this->setBrowserUrl('...');
    }

    public function tearDown()
    {
    }

    public function testPageExists()
    {
        $this->url('/');
        // test if browser window stays open when test fails
        $this->assertTrue(false);
    }
}


0 commentaires

1
votes

Une solution simple consiste à définir la propriété Session $ arrêtée sur TRUE, dans la méthode de la configuration du test (). Comme la propriété est privée, nous devons utiliser l'API de réflexion.

    function setUp() {

        ....

        // Set the private property $stopped of session to true, so the window is not closed on error or at the end of tests
        $myClassReflection = new \ReflectionClass( get_class( $this->prepareSession() ) );
        $secret            = $myClassReflection->getProperty( 'stopped' );
        $secret->setAccessible( true );
        $secret->setValue( $this->prepareSession(), true );

        ...
}


0 commentaires