我是开发人员,也是QA /自动化测试的新手。
我试图理解以下代码;

public WebElement getVisibleElement( final By by, final WebElement parentElement, int timeoutValue, TimeUnit timeoutPeriod, int pollingInterval, TimeUnit pollingPeriod ) {
    return fluentWait(timeoutValue, timeoutPeriod, pollingInterval, pollingPeriod).until( new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            try {
            } catch {
            }
            return null;
        }
    });
}


在同一个班级,我也有;

public Wait<WebDriver> fluentWait(int timeoutValue, TimeUnit timeoutPeriod, int pollingInterval, TimeUnit pollingPeriod) {

    return new FluentWait<WebDriver>(this.webDriver)
                        .withTimeout(timeoutValue, timeoutPeriod)
                        .pollingEvery(pollingInterval, pollingPeriod)
                        .ignoring(NoSuchElementException.class);
}


我特别想了解两件事;


return fluentWait()到底在做什么?
till()的使用在这里是什么意思?

最佳答案

他们绑在一起,所以我不会这样单独回答:

Selenium的FluentWait方法通常只是等待某个条件成立。您可以给它提供许多不同的可能条件,它将一直对其进行评估,直到它为真或通过您的超时值(以先到者为准)。

a)return,在大多数编程语言中,只是从方法中返回某些内容。

b)until是您调用FluentWait使其物理评估条件的方法。之前的所有事情,都只是使用.until(....)进行设置,告诉FluentWait实例去评估我提供给您的代码。在您的情况下,我假设方法的名称(实际方法是不完整的),通过调用.until(....)告诉FluentWait继续尝试从页面中获取元素,直到用户对它物理可见为止。

fluentWait方法仅设置要使用的FluentWait实例,而apply/until代码部分则设置要评估的条件。在您的getVisibleElement方法中,您将返回一个WebElement,因此在您的apply代码部分中,一旦对用户可见,您将需要返回WebElement

我以为您想在apply内执行的操作是使用普通的.findElement查找元素并检查其visible属性。如果为true,则返回找到的WebElement,否则为null强制FluentWait继续运行。

因此,return fluentWait只是说“返回此FluentWait返回的值”。由于该方法已经被声明为返回WebElement实例,因此您在说“返回此FluentWait返回的任何WebElement”。

08-07 12:22