1

類似しているが同一ではないいくつかのページをすばやく移動するアプリケーションで FirefoxDriver を使用しています。実行を高速化するために (FF を使用する必要があります)、webdriver.load.strategy プロパティを「unstable」に設定しました。これは確かにページを完全に読み込まないことでスピードアップしますが、非常に奇妙なエラーが見つかりました.

ページのリストとそのデータを含むファイルを調べたところ、一部のページが間違ったデータと一致していることがわかりました。デバッグすると、ステップ実行中はすべて正常に動作しましたが、プログラムを数ページでも実行させるとすぐに、間違ったページからデータを取得し始めました。(明確にするために、たとえば、 の後に を実行しdriver.get(www.google.com)driver.get(www.stackoverflow.com)次にdriver.findElements()StackOverflow のページ タイトルを取得するために実行すると、「Google」が返されます。)

実行中のブラウザをよく見ると、URL ボックスの URL と実際に表示されているページが一致していないように見えました。URL は、ページよりもはるかに速く変化していました。ページが完全に読み込まれるまでドライバーが待機していないため、findElements を呼び出す前に、同じクラス名を持つ前のページから要素を取得していると思われます。

これは、webdriver.load.strategy 'stable' が何をすべきかを考えるとある程度理にかなっていますが、ページの要素に Wait を設定しましたが、待機していないようです。すべてのページに同じ要素が含まれているため、要素が既に表示されている可能性がありますか? すべてのページの設定が同じであるため、他のことを待つことはできません。異なるのは個々のテキストだけであり、それがどうなるかは事前にわかりません.

誰かがこの問題に遭遇しましたか? 問題の原因についての私の推測は正しいですか? 不安定なロード戦略を削除する以外にできることはありますか?

ありがとう、bsg EDIT webdriver.load.strategy 'stable' が設定されていない場合、コードは完全に機能しますが、いくつかのコードを追加しています。

for(String url : urllist)
{
  driver.get(url);
  WebElement header = (new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.tagName("h1")));
  elements = driver.findElements(By.className(elementclassname));
}

各ページに、h1 と、class=elementclassname を持ついくつかの要素があることに注意してください。

4

1 に答える 1

1

ページが完全に読み込まれるまでドライバーが待機していないため、findElements を呼び出す前に、同じクラス名を持つ前のページから要素を取得していると思われます。

あなたの仮説は正しいと思います。

ほぼ同じことがstrategyの説明にunstable書かれています:

.get または .click を呼び出した後、Firefox がページ全体がロードされるのを待たないようにするベータ機能があります。これにより、即時の検索が中断される可能性があるため、暗黙的または明示的な待機も必ず使用してください。

(見栄えがよくない) 回避策としてdriver、要素を含まないページpresenceOfElementLocated()(空白ページなど) を参照することができます。

何かのようなもの:

for(String url : urllist)
{
  driver.get(url);
  WebElement header = (new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.tagName("h1")));
  elements = driver.findElements(By.className(elementclassname));
  driver.get("about:blank"); // <<<<<<<<<<
}

そのdriverため、 newurlに到達すると、空白のページが表示され、要素がページに表示されるまで待機する必要があります。

于 2014-01-06T22:37:00.840 に答える