web-dev-qa-db-fra.com

Essayer d'automatiser avec Selenium en parallèle, mais plusieurs instances de WebDriver paniquent

J'essaie donc de créer un programme Java qui utilise Selenium pour automatiser WebDriver afin d'effectuer des tâches sur un site Web. Pour le moment, je l'utilise pour le travail afin d'automatiser une tâche fastidieuse dans laquelle l'utilisateur doit télécharger des fichiers dans notre base de données. J'ai déjà créé avec succès un programme qui automatise cela et m'a évité des heures de travail manuel.

Maintenant, j'essaie de faire en sorte que le programme exécute plusieurs navigateurs dans parallel . Je souhaite effectuer cette opération afin d’accélérer la vitesse à laquelle je peux télécharger des fichiers, car la plupart du temps est perdu à attendre le chargement des pages.

J'ai testé cela avec une version beaucoup plus simple de mon programme et j'ai réussi à accélérer les tâches simples de 2 à 10 fois en ayant des dizaines à des centaines de threads ouverts avec leurs propres WebDrivers. 

Le problème est que, chaque fois que je lance plus de 1 WebDriver, tout commence à paniquer de façon aléatoire, parfois pas du tout. J'ai essayé d'utiliser 'PhantomJSDriver' avec le dernier 'PhantomJS.exe' , mais parfois cela fonctionnerait et la plupart du temps, il ne ferait rien. Le même programme qui fonctionne parfaitement avec un seul pilote tombe en panne quand ils sont exécutés en parallèle.

J'ai essayé de trouver des raisons pour expliquer cela et des solutions, mais je n'ai rien trouvé de précis que je puisse utiliser.

Comment puis-je automatiser la navigation Web en parallèle avec Selenium si possible, et si non, où devrais-je me tourner pour le faire?

16
user2473153

C’est ce dont vous avez besoin, il s’appelle "grille de sélénium"

http://Selenium-grid.seleniumhq.org/

4
LINGS

En réalité, en utilisant Grid, vous pouvez automatiser les tests en parallèle à l'aide d'une même machine ou de plusieurs machines (ici, des machines au sens d'ordinateur).

J'espère que ce lien vous montrera comment exécuter des tests en parallèle sur la même machine .

Dans le lien ci-dessus, l’utilisateur a déclaré créer cinq programmes différents à exécuter en parallèle. Si vous souhaitez exécuter un seul programme en parallèle, utilisez simplement TestNg or Junit pour déclencher plusieurs instances.

Ceci est l'exemple TestNg config code pour exécuter un test en parallèle. Ici, j'ai couru deux discussions. Donc, il invoquera la méthode TestNg @Test d'un fichier de classe donné com.test.workflow.device.testcase20 dans deux threads. 

  <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite1"  parallel="test" thread-count="2">
   <test name="Testcase20" >
    <classes>
        <class name="com.test.workflow.device.testcase20"/>
    </classes>
  </test>
 </suite>

En utilisant le fichier XML ci-dessus, vous pouvez obtenir un parallélisme dans WebDriver à l'aide de la grille.

2
Manigandan

si vous utilisez Webdriver, essayez maven-surefire-plugin:

<plugins>
    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <forkCount>4</forkCount>
        </configuration>
    </plugin>
</plugins>

dans le code, utilisez l'option 'forkCount', valeur 4 - nombre de processeurs. 4 processeurs = 4 JVM. Vous pouvez démarrer webdriver pour chaque machine virtuelle! Link info http://maven.Apache.org/surefire/maven-surefire-plugin/test-mojo.html

0
gest

Il est possible d'exécuter des instances de Selenium simultanément. Lorsque Selenium exécute des instances de navigateur, il ouvre la connexion sur le port 7055 par défaut.

Donc, si vous voulez exécuter plusieurs instances, vous devez les exécuter sur des ports différents.

0
ajahongir

Vous pouvez essayer avec Sahi http://sahi.co.in/ . Il peut exécuter plusieurs instances de navigateurs en parallèle. 

Regardez comment Sahi télécharge des fichiers. http://sahi.co.in/w/_setFile

0
Narayan Raman

Je suggérerais que vous construisiez un pilote pour chaque navigateur et que votre code sache que vous utilisez plus que plusieurs pilotes. Autre suggestion déjà décrite ci-dessus, l’utilisation de Selenium Grid est la meilleure solution disponible: https://sqa.stackexchange.com/questions/5431/how-to-open-men-ulters-allers-using- webdriverhttps://github.com/SeleniumHQ/Selenium/wiki/Grid2

0
Eyal Sooliman