Я использую cuke4duke в проекте grails. Функции/поддержка/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» печатает true.
Примечание: пакет HtmlUnit написан на Java.
Любые идеи? (Это вершина трассировки стека)
[INFO] org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: Нет подписи метода: org.openqa.selenium.htmlunit. HtmlUnitDriver.setConfirmHandler() является применимо для типов аргументов: (ConfirmationHandler) значения: [ConfirmationHandler @ 6c08bae7] (NativeException)
Да, моя ошибка, я вызывал метод в неправильном классе. Теперь это работает. – carlosayam