web-dev-qa-db-ja.com

Seleniumを並行して自動化しようとしていますが、複数のWebドライバーインスタンスが異常終了します

そこで、Seleniumを使用してWebDriverを自動化してWebサイトでタスクを実行するJavaプログラムを作成しようとしています。現在、迷惑な自動化のために作業に使用しています。ユーザーがデータベースにファイルをアップロードする必要があるタスク。これを自動化するプログラムはすでに正常に作成されており、手作業の時間を節約できました。

今、私はプログラムに複数のブラウザをparallelで実行させようとしています。ページの読み込みを待つ時間のほとんどが失われるため、ファイルをアップロードできる速度を上げるためにこれを実行したいと思います。

私はこれをはるかに単純なバージョンのプログラムでテストし、独自のWebDriverで数十から数百のスレッドを開くことで、単純なタスクを2〜10倍高速化することができました。

問題は、私が1 WebDriverを超えて実行するときはいつでも、全体がランダムに狂ってしまうことです。時間はまったく機能しません。 'PhantomJSDriver'を最新の 'PhantomJS.exe'と一緒に使用してみました-)ただし、動作する場合もあり、ほとんどの場合、何も実行されません。 1つのドライバーを実行して問題なく実行する同じプログラムは、並列で実行すると機能しなくなります。

私はこれが起こる理由とそれを回避する方法についての理由を見つけようとしてきましたが、私が使用できる明確なものは何も見つかりませんでした。

可能であれば、Seleniumと並行してWebブラウジングを自動化するにはどうすればよいですか?そうでない場合は、これを行うためにどこを探す必要がありますか?

16
user2473153

これはあなたが必要とするものです、それは「セレングリッド」と呼ばれています

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

4
LINGS

実際にGridを使用すると、同じマシンを使用するか、複数のマシン(ここでは個々のコンピューターの意味でのマシン)を使用して、テストを並行して自動化できます。

私はこれを願っています リンクは同じマシンで並行してテストを実行する方法を示します

上記のリンクで、ユーザーは並行して実行する5つの異なるプログラムを作成すると述べました。単一のプログラムを並行して実行する場合は、TestNg or Junitを使用して複数のインスタンスをトリガーします。

これは、テストを並行して実行するためのサンプルTestNg config codeです。ここで私は2つのスレッドを実行しました。したがって、2つのスレッドで特定のクラスファイル@TestのTestNgcom.test.workflow.device.testcase20メソッドを呼び出します。

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

上記のxmlファイルを使用することにより、グリッドを使用してWebドライバーで並列処理を実現できます。

2
Manigandan

webdriverを使用している場合は、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>

コードで使用するオプション 'forkCount'値4-プロセッサの数。 4プロセッサ= 4JVM。 UはJVMごとにWebドライバーを起動できます!リンク情報 http://maven.Apache.org/surefire/maven-surefire-plugin/test-mojo.html

0
gest

Seleniumインスタンスを同時に実行することは可能です。 Seleniumがブラウザインスタンスを実行すると、デフォルトでポート 7055 で接続が開きます。

したがって、複数のインスタンスを実行する場合は、それらを異なるポートで実行する必要があります。

0
ajahongir

Sahiで試すことができます http://sahi.co.in/ 。ブラウザの複数のインスタンスを並行して実行できます。

ただし、Sahiがファイルのアップロードをどのように行うかを確認してください。 http://sahi.co.in/w/_setFile

0
Narayan Raman

ブラウザごとにドライバを作成し、複数のドライバを使用していることをコードに通知することをお勧めします。すでに上で説明したように、Selenium Gridを使用することが利用可能な最善のソリューションです: https://sqa.stackexchange.com/questions/5431/how-to-open-multiple-browsers-using-webdriverhttps://github.com/SeleniumHQ/Selenium/wiki/Grid2

0
Eyal Sooliman