我无法理解这段代码,是否在方法中定义了构造函数?我知道正在返回一个WebElement对象,但是在java中这是一种什么样的编码概念。
WebElement foo = wait.until(new Function() {
public WebElement apply(WebDriver driver) {
return driver.findElement( By.id("foo") );
}
});
答案 0 :(得分:1)
首先,
WebDriverWait wait = new WebDriverWait();
WebDriverWait.util,它从FluentWait扩展,定义如下
public <V> V until(Function<? super T, V> isTrue)
所以现在你知道你必须传递一个Function类型直到。但是Function只是一个没有实现的方法'apply'的接口,所以你必须实现它然后才能使用匿名类。
实际上,如果你在Selenium-Webdriver中使用这种模式,以下是通用
的好方法ExpectedCondition ec = new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver d) {
return d.findElement(By.id("cutome"));
}
};
ExpectedCondition:public interface ExpectedCondition<T> extends Function<WebDriver, T> {}
答案 1 :(得分:0)
它不是在创建构造函数。相反,它正在创建一个与Select DATE_FORMAT(timestamp,'%m/%y') as timestamp,data,delta from mytable groupby timestamp
兼容的类型。它为什么这样做? Function
是一个接口或一个抽象类(我不知道,编辑我的答案),这意味着,它没有构造函数/它的构造函数不能被调用。那你怎么写
Function
这就是花括号中的东西进来的地方。new Function ()
有一个名为Function
的方法,它没有实现(抽象)。这也是您无法构造抽象类和接口的原因。所以现在在花括号中,你在一个扩展apply
/ implements apply
的匿名类中实现Function
方法(取决于Function
是接口还是抽象类)。但是Java为你做了所有这些,所以你不必担心。上述评论中的链接非常好。你可以在那里了解更多。