我是开发人员,也是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”。