3

Grid で実行されている複数のインスタンスで Selenium のスクリーンショットはどのように処理されますか? 1 つのノード マシンで 3 つの Firefox ブラウザを同時に実行するグ​​リッド ノードを駆動するグリッド ハブがあるとします。3 つのノード スレッドのそれぞれから 3 つの異なるスクリーンショットを取得するにはどうすればよいですか?

たとえば、シングル スレッド テスト用の次のコード スニペットを見てみましょう。

RemoteWebDriver driver;
driver = new RemoteWebDriver(new URL("http://127.1/wd/hub"), DesiredCapabilities
    .firefox() );
driver.get( "http://www.google.com/" );
WebDriver augmentedDriver = new Augmenter().augment(driver);
File screenshot = (TakesScreenshot)augmentedDriver.getScreenshotAs(OutputType
    .FILE);
System.out.println( "Page title is: " + driver.getTitle() );
System.out.println( "Screenshot is located at: " + screenshot.getAbsolutePath());
assertTrue( "Page did not contain string.", driver.getSource().contains( 
    "search") );
driver.quit();
4

4 に答える 4

3

それは絶対にうまくいきます。

スクリーンショットは、実際にはその特定のドライバー インスタンスのイメージであり、一般的なデスクトップ イメージではありません。各スクリーンショットに複数のブラウザが表示されることはありません

于 2013-09-01T06:42:27.713 に答える
2

何よりもまず、Selenium/WebDriver/Selenium Gridマルチスレッドを処理しません。基礎となるテスト フレームワーク (TestNG/JUnit/Cucumberなど) が処理します。WebDriver はスレッド セーフではありません。テストを並行して実行している場合は、コードがスレッド セーフであることを確認する必要があります。

質問に戻りますが、あなたが書いたコードは同じスクリーンショット ファイルを上書きします。ファイルを別の名前で別の場所にコピーする必要があります。スクリーンショット ファイルの前にミリ秒精度のタイム スタンプを付けてから、スクリーンショット ファイルをコピーすることをお勧めします。このようにして、3 つの異なるブラウザー インスタンスに対して 3 つの固有の異なるスクリーンショットが作成されます。これは過去に私のために働いていました。

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
String file_name = "screenshot_"+ Add system_time with millisecond precision 
FileUtils.copyFile(scrFile, new File(file_name));
于 2013-09-02T00:46:00.833 に答える