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.

Thanks,
Mohan

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

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)
  .ignoring(NoSuchElementException.class);
WebElement foo = wait.until(application);      
     
    }
                          }
                           try{
                                  ieDriver.get("http://www.google.com");
                                  WebElement element = new Fluent(ieDriver).waitFluently(); //driver.findElement(By.name("q"));
                           }catch(Exception e) {
                                  log.info(" Exception " + e.getMessage());
                           }finally{
                                  ieDriver.quit();
                           }


Thanks,
Mohan