我在grails项目中使用cuke4duke。 features / support / env.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 !
...
}
看起来这个类得到了正确的编译,但是groovy不能调用setConfirmHandler,因为它需要一个ConfirmHandler ...但是提供的对象的类实现了接口!我检查了“确认实例的ConfirmHandler”打印为true。
注意:HtmlUnit包是用Java编写的。
有什么想法吗? (这是堆栈跟踪的顶部)
[INFO] org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException:没有方法签名: org.openqa.selenium.htmlunit.HtmlUnitDriver.setConfirmHandler()是 适用于参数类型:(ConfirmationHandler)值: [ConfirmationHandler @ 6c08bae7](NativeException)
答案 0 :(得分:0)
你不需要这样做:
browser.getWebClient().setConfirmHandler( confirmation )
因为我看不到HtmlUnitDriver有一个setConfirmHandler
方法......