I posted this too soon.

This line 

Function<WebDriver, Boolean> application =  {  wd -> wd.findElement(By.name("q"))}

removes that error. Hope this is the right way.


On 11 December 2017 at 15:06, Mohan Radhakrishnan <radhakrishnan.mohan@gmail.com> wrote:

When I try to pass a lambda to a Selenium API call I see this error. Believe this version of Selenium uses Guava lambdas.

I understand that I need to be explicit and specify whether it is a Function or a Predicate. But don't know how to do this with groovy.

So here I may have to explicitly declare a Function with an 'apply' method.

Cannot resolve which method to invoke for [class Fluent$_closure1] due to overlapping prototypes between:
[interface com.google.common.base.Function]
[interface com.google.common.base.Predicate]

                         ieDriver = new ChromeDriver();  
   class Fluent{
     ChromeDriver ieDriver;
     def application =  {  wd -> wd.findElement(By.name("q"))}
     Fluent( ChromeDriver ieDriver){
      this.ieDriver = ieDriver;
     public WebElement waitFluently(){
           Wait wait = new FluentWait( ieDriver)
                  .withTimeout(10, SECONDS )
                  .pollingEvery(5, SECONDS)
WebElement foo = wait.until(application);      
                                  WebElement element = new Fluent(ieDriver).waitFluently(); //driver.findElement(By.name("q"));
                           }catch(Exception e) {
                                  log.info(" Exception " + e.getMessage());