您能在Java和Selenium中为显式等待创建一个通用的或可重用的方法吗?

您能在Java和Selenium中为显式等待创建一个通用的或可重用的方法吗?,java,selenium-webdriver,Java,Selenium Webdriver,我们可以在Java和Selenium中为显式等待创建一个通用的或可重用的方法吗 使用预期的条件,如元素所在位置的可见性、元素所在位置的存在性、元素可禁用 感谢您的帮助 谢谢你完全可以。我从我在这里写的另一个答案中得出: 这可以像这样使用: WebDriverWait wait = new WebDriverWait(driver, maxSecondsToWait); wait.until(waitForElementToHaveText(anElement, "my visible text"

我们可以在Java和Selenium中为显式等待创建一个通用的或可重用的方法吗

使用预期的条件,如元素所在位置的可见性、元素所在位置的存在性、元素可禁用

感谢您的帮助


谢谢

你完全可以。我从我在这里写的另一个答案中得出:

这可以像这样使用:

WebDriverWait wait = new WebDriverWait(driver, maxSecondsToWait);
wait.until(waitForElementToHaveText(anElement, "my visible text"));
编辑:

另外,如果您注意到
ExpectedCondition
使用的声明泛型类型是布尔类型,这意味着您希望返回true或false以确定是否满足条件。但是null也可以作为false的替代。因此,另一种方法是将
ExpectedCondition
声明为具有
WebElement
的泛型类型,并在不满足该条件时返回null

public static ExpectedCondition<WebElement> waitForElementToContainText(final String cssSelector, final String visibleText) {
    return new ExpectedCondition<WebElement>() {
        @Override
        public WebElement apply(WebDriver webDriver) {
            WebElement anElement = webDriver.findElement(By.cssSelector(cssSelector);
            if (anElement.getText().contains(visibleText)) {
                return anElement; // Condition passed
            }
            return null; // Condition failed
        }

        public String toString() {
            return "first occurance of text '" + visibleText + "' in element " + cssSelector;
        }
    };
}
public static ExpectedCondition waitForElementToContainText(最终字符串cssSelector,最终字符串visibleText){
返回新的ExpectedCondition(){
@凌驾
公共WebElement应用(WebDriver WebDriver){
WebElement-anElement=webDriver.findelelement(由.cssSelector(cssSelector)生成);
if(anElement.getText()包含(visibleText)){
返回元素;//传递了条件
}
返回null;//条件失败
}
公共字符串toString(){
在元素“+cssSelector”中返回“文本的首次出现“+”visibleText+”;
}
};
}

当然,这两个示例中的任何一个都可以使用
,并且只想为其选择一个适当的返回值。

您可能指的是隐式等待(直到满足某些条件为止)。显式等待是Thread.sleep(10000)@SinishaMihajlovski OP应该是指selenium中内置的显式等待API。请参阅记录,不要使用Thread.sleep()在您的自动化中。当您的目标是降低selenium的速度时,这从来不是最佳选择。这就是为什么selenium有一个API来创建这些类型的延迟,定义明确的条件。感谢帮助。这对“InvisibilityFelementLocated”和“ElementToBelickable”条件有效吗?InvisibilityFelemNetLocated和ElementToBelickable a重新包装预先制作好并准备好使用的条件。你所说的“这些条件有用吗?”
WebDriverWait wait = new WebDriverWait(driver, maxSecondsToWait);
wait.until(waitForElementToHaveText(anElement, "my visible text"));
public static ExpectedCondition<WebElement> waitForElementToContainText(final String cssSelector, final String visibleText) {
    return new ExpectedCondition<WebElement>() {
        @Override
        public WebElement apply(WebDriver webDriver) {
            WebElement anElement = webDriver.findElement(By.cssSelector(cssSelector);
            if (anElement.getText().contains(visibleText)) {
                return anElement; // Condition passed
            }
            return null; // Condition failed
        }

        public String toString() {
            return "first occurance of text '" + visibleText + "' in element " + cssSelector;
        }
    };
}