4

Selenium で Web サイトを開き、xpath 経由でテキストを抽出したいと考えています。動作していますが、ウェブサイト全体が読み込まれるまで数秒待つとテキストを取得できますが、ウェブサイトが完全に読み込まれているかどうかを確認する方がよいでしょう. バックグラウンド接続 (ajax 呼び出し、GET、POST など) を確認する必要があると思いますが、それを行う最善の方法は何ですか? 現時点では、while ループでテキストを抽出しようとしています (醜い解決策):

WebDriver driver = new FirefoxDriver();
driver.get("http://www.website.com");


// Try to get text
 while (true) {
   try {
     WebElement findElement = driver.findElement(By.xpath("expression-here"));
     System.out.println(findElement.getText());
     break;
// If there is no text sleep one second and try again
   } catch (org.openqa.selenium.NoSuchElementException e) {
     System.out.println("Waiting...");
     Thread.sleep(1000);
   }
 }

これをどのように解決しますか?

4

2 に答える 2

3

Selenium には、このためのタイムアウトが既にあります。

ここを見てください: http://seleniumhq.org/docs/04_webdriver_advanced.jsp

私はそれを解決しました:

webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
于 2012-12-27T00:08:32.457 に答える
2

明示的な待機を好む:
1) より読みやすい
2) 長い間それらを使用している
3) 要素が存在しないことがわかっていて (テストはそれを検証することです)、10 秒間ポーリングする必要がない場合はどうなりますか? 暗黙的に使用すると、時間を無駄にしています。

WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(new ExpectedCondition<WebElement>(){
    @Override
    public WebElement apply(WebDriver d) {
        return d.findElement(By.id("myDynamicElement"));
    }});
于 2012-12-27T12:35:57.463 に答える