0

Webドライバーを作成するためのこのコードがあります。
これで、ドライバーを1つずつ作成すると、このコードは正常に機能します。
これらのドライバーを複数のスレッドで作成すると、問題が発生します。

public static WebDriver getConfiguredWebDriver(.....)
  WebDriver driver = null;
  DesiredCapabilities cap = new DesiredCapabilities();
  if(ffp != null) {
    ffp.setPreference("general.useragent.override", getRandomizedUASettings(rand, UserAgentList));
  }
  driver = new FirefoxDriver(null, ffp, cap);
  //driver = new FirefoxDriver(); also gives an error of the same kind during multithreading
  return driver;
}

このエラーが発生します

"Thread-4" org.openqa.selenium.WebDriverException:ポート7057でバイナリFirefoxBinary(C:\ Program Files(x86)\ Mozilla Firefox \ firefox.exe)に接続できませんでした。プロセス出力は次のとおりです。nullビルド情報:バージョン: '2.28.0'、リビジョン: '18309'、時間: '2012-12-11 20:21:45'システム情報:os.name:'Windows 7'、os。 arch:'amd64'、os.version: '6.1'、java.version: '1.6.0_26'

スレッドコードは

while(...) {
  ....... //
  FirefoxProfile ffp = new FirefoxProfile();
  DataEntryThread t = new DataEntryThread(parentFrame, lead, new ProxySettings(proxySettings), ffp, UserAgentList);
  t.start();
  ....... //
}

エラーは任意のスレッドでランダムに発生し、ポート番号でも発生します。ここで何が問題になっていますか?異なるスレッドに複数のFirefoxドライバーをロードするにはどうすればよいですか?

4

1 に答える 1

2

私はこれの回避策を見つけました..上記のコードの一部を変更するだけです

boolean driverCreated = false;
int retryCnt = 3;
int count = 0;
while(!driverCreated && count < retryCnt) {
  try {
    driver = new FirefoxDriver(null, ffp, cap);
    driverCreated = true;
    System.out.println("Driver Created");
  } catch (Exception e) {
    retryCnt++;
  }
}
if(driverCreated == false) { return null; }

基本的に、異なるスレッドを使用してロードされているドライバーは、同時にFirefoxの同じバイナリファイルにアクセスしていると思います。これによりエラーが発生しますが、それでもわかりません。

于 2013-01-23T02:04:56.813 に答える