2012-05-30 55 views
0

我在grails項目中使用cuke4duke。該功能/支持/ env.groovy有在groovy中定義的類實現接口,但不能調用方法

import org.openqa.selenium.htmlunit.HtmlUnitDriver 
import org.openqa.selenium.JavascriptExecutor 
import com.gargoylesoftware.htmlunit.BrowserVersion 
import com.gargoylesoftware.htmlunit.ConfirmHandler 
import com.gargoylesoftware.htmlunit.Page 
...  
this.metaClass.mixin(cuke4duke.GroovyDsl) 
... 
public class ConfirmationHandler implements ConfirmHandler { 

    boolean handleConfirm(Page page, String message) { 
     called = true 
     if (text == null || text.length()==0) { 
     return answer 
     } 
     if (message.contains(text)) { 
     return answer 
     } 
     throw new RuntimeException("Expected '${text}' in confirmation message but got '${message}'")  
    } 
    public String text = null 
    public boolean answer = false 
    public boolean called = false 
} 
... 
Before() { 
... 
    browser = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6) 
    confirmation = new ConfirmationHandler() 
    browser.setConfirmHandler((ConfirmHandler) confirmation) // ERROR ! 
... 
} 

看來類才能正確編譯,但常規不能稱之爲setConfirmHandler,因爲它需要一個ConfirmHandler ...但所提供的對象的類實現接口!我檢查了「ConfirmHandler的確認實例」打印爲真。

注意:HtmlUnit包是用Java編寫的。

任何想法? (這是堆棧跟蹤的頂部)

[INFO] org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: org.openqa.selenium.htmlunit:方法的無簽名。 HtmlUnitDriver.setConfirmHandler()是 適用於參數類型:(ConfirmationHandler)值: [ConfirmationHandler @ 6c08bae7(NativeException)

回答

0

不要你需要做的:

browser.getWebClient().setConfirmHandler(confirmation) 

因爲我看不到HtmlUnitDriver有setConfirmHandler方法...

+0

是的,我的錯誤,我是在錯誤的類上調用方法。現在它可以工作。 – carlosayam

相關問題