了解以下代码

时间:2015-09-01 07:08:46

标签: java selenium

我无法理解这段代码,是否在方法中定义了构造函数?我知道正在返回一个WebElement对象,但是在java中这是一种什么样的编码概念。

WebElement foo = wait.until(new Function() {

     public WebElement apply(WebDriver driver) {

         return driver.findElement( By.id("foo") );

     }

});

2 个答案:

答案 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为你做了所有这些,所以你不必担心。上述评论中的链接非常好。你可以在那里了解更多。