5

PageFactory アノテーションを使用して Selenium に存在しない要素を待つ方法はありますか?

使用時:

@FindBy(css= '#loading-content')
WebElement pleaseWait;

要素を見つけるには、次のようにします。

wait.until(ExpectedConditions.invisibilityOfElementLocated(pleaseWait));

私は得るでしょう:

org.opeqa.selenium.WebElement cannot be converted to org.openqa.selenium.By

以下を使用して、必要なことを行うことができます。

wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector('loading-content')));

ただし、フレームワークの一貫性を保つために PageFactory アノテーションを使用できるようにしたいと考えています。これを行う方法はありますか?

4

4 に答える 4

0

デフォルトでは、要素がページに存在しない場合、invisibilityOf は true を返しません。(NoSuchElementException)

public static ExpectedCondition<Boolean> invisibilityOf(final WebElement element) {
return new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver webDriver) {
        return ExpectedConditions.isInvisible(element);
    }

    public String toString() {
        return "invisibility of " + element;
    }
};
}

代わりに使用できる WebDriverUtils クラスでメソッドを作成できます。

public static ExpectedCondition<Boolean> invisibilityOf(final WebElement element) {
return new ExpectedCondition<>() {
    public Boolean apply(WebDriver webDriver) {
        try {
            return !element.isDisplayed();
        } catch (NoSuchElementException | StaleElementReferenceException e) {
            return true;
        }
    }

    public String toString() {
        return "invisibility of " + element;
    }
};
}

invisibilityOfElementLocated(final By locator) と同様

于 2021-08-16T11:03:52.713 に答える