java - 画面遷移 - selenium 読み込み待ち




要素がSeleniumに存在するまで待つ方法 (4)

FluentWaitはNoSuchElementExceptionをスローします。混乱の場合です

org.openqa.selenium.NoSuchElementException;     

〜と

java.util.NoSuchElementException

.ignoring(NoSuchElementException.class)

私は、Seleniumがページロード後にDOMに動的に追加される要素を待つようにしようとしています。 これを試した:

fluentWait.until(ExpectedConditions.presenceOfElement(By.id("elementId"));

それが助けになる場合は、こちらがfluentWaitです。

FluentWait fluentWait = new FluentWait<>(webDriver) {
    .withTimeout(30, TimeUnit.SECONDS)
    .pollingEvery(200, TimeUnit.MILLISECONDS);
}

しかし、 NoSuchElementExceptionスローされます。つまり、 presenceOfElementはその要素がpresenceOfElementすることを期待しているので、これには欠陥があります。 これは、セレンのパンとバターでなければならないし、ホイールを再発明したくない...誰もが、理想的には自分のPredicateを回転させることなく、代替案を提案することができますか?



WebDriverWait wait = new WebDriverWait(driver,5)
wait.until(ExpectedConditions.visibilityOf(element));

あなたは、ページコード全体がロードされる前にこれをしばらく使用して、スローとエラーを実行することができます。 時間は秒単位です


public WebElement fluientWaitforElement(WebElement element, int timoutSec, int pollingSec) {

    FluentWait<WebDriver> fWait = new FluentWait<WebDriver>(driver).withTimeout(timoutSec, TimeUnit.SECONDS)
        .pollingEvery(pollingSec, TimeUnit.SECONDS)
        .ignoring(NoSuchElementException.class, TimeoutException.class).ignoring(StaleElementReferenceException.class);

    for (int i = 0; i < 2; i++) {
        try {
            //fWait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@id='reportmanager-wrapper']/div[1]/div[2]/ul/li/span[3]/i[@data-original--title='We are processing through trillions of data events, this insight may take more than 15 minutes to complete.']")));
        fWait.until(ExpectedConditions.visibilityOf(element));
        fWait.until(ExpectedConditions.elementToBeClickable(element));
        } catch (Exception e) {

        System.out.println("Element Not found trying again - " + element.toString().substring(70));
        e.printStackTrace();

        }
    }

    return element;

    }




predicate