Skip to content

Bug: Widget proxying #1936

@ghost

Description

Description

Since java client 8.5.1 where cglib was replaced with bytebuddy there's an issue with widget proxying.

Environment

  • Java client 8.5.1
  • Appium server 2.0.0-beta.71
  • Ubuntu 20.04
  • Android
  • Emulator

Code To Reproduce Issue [ Good To Have ]

Widgets:

public abstract class CardNumberField extends Widget {

    @AndroidFindBy(id = "inputViewId")
    protected WebElement field;

    protected CardNumberField(WebElement element) {
        super(element);
    }

    public abstract String getLabel();
}
public class AndroidCardNumberField extends CardNumberField {

    protected AndroidCardNumberField(WebElement element) {
        super(element);
    }

    public String getLabel() {
        final String attribute = "hint";
        return field.getAttribute(attribute);
    }
}

in some screen class:

   @AndroidFindBy(id = "inputId")
   @OverrideWidget(androidUIAutomator = AndroidCardNumberField.class)
   private CardNumberField cardAccountField;

Exception Stacktraces

java.lang.IllegalArgumentException: None of [public static java.lang.Object io.appium.java_client.proxy.Interceptor.intercept(java.lang.Object,java.lang.reflect.Method,java.lang.Object[],java.util.concurrent.Callable) throws java.lang.Throwable, private static java.lang.Object io.appium.java_client.proxy.Interceptor.lambda$null$2(java.lang.Object), private static java.lang.Object io.appium.java_client.proxy.Interceptor.lambda$null$0(java.lang.Object), private static void io.appium.java_client.proxy.Interceptor.lambda$intercept$3(java.lang.Object,java.lang.reflect.Method,java.lang.Object[],java.lang.Object,io.appium.java_client.proxy.MethodCallListener), private static void io.appium.java_client.proxy.Interceptor.lambda$intercept$1(java.lang.Object,java.lang.reflect.Method,java.lang.Object[],io.appium.java_client.proxy.MethodCallListener)] allows for delegation from public abstract java.lang.String autotests.component.field.cardnumber.CardNumberField.getLabel()
	at net.bytebuddy.implementation.bind.MethodDelegationBinder$Processor.bind(MethodDelegationBinder.java:1099)
	at net.bytebuddy.implementation.MethodDelegation$Appender.apply(MethodDelegation.java:1349)
	at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody.applyCode(TypeWriter.java:730)
	at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody.applyBody(TypeWriter.java:715)
	at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod.apply(TypeWriter.java:622)
	at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForCreation.create(TypeWriter.java:6043)
	at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:2224)
	at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$UsingTypeWriter.make(DynamicType.java:4050)
	at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3734)
	at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3986)
	at io.appium.java_client.proxy.Helpers.createProxy(Helpers.java:121)
	at io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:83)
	at io.appium.java_client.pagefactory.AppiumFieldDecorator.decorateWidget(AppiumFieldDecorator.java:199)
	at io.appium.java_client.pagefactory.AppiumFieldDecorator.decorate(AppiumFieldDecorator.java:148)
	at org.openqa.selenium.support.PageFactory.proxyFields(PageFactory.java:111)
	at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:103)
	at autotests.screen.BaseScreen.<init>(BaseScreen.java:23)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions