0

我从事开发和 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);
}

特别是我想了解的两件事;

  1. return fluentWait() 到底在做什么?
  2. 在这里使用 until() 是什么意思?
4

1 回答 1

2

它们联系在一起,所以我不会单独回答它们:

Selenium 的FluentWait方法通常只是等待某个条件为真。您可以给它许多不同的可能条件,它会继续评估它,直到它为真或通过您的超时值,以先到者为准。

a) return,在大多数编程语言中只是从方法中返回一些东西。

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

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

我假设你想要在apply, 中做的是使用正常查找元素.findElement并检查它的visible属性。如果是真的,返回WebElement找到的,如果不是,返回null强制FluentWait继续。

因此return fluentWait,这只是说“返回任何FluentWait返回的东西”。其中,由于该方法已被声明为返回一个WebElement实例,因此您说的是“返回任何 WebElement 这FluentWait返回”。

于 2013-10-16T13:35:22.313 回答