Java 使用@AndroidFindBy时,元素为Null

Java 使用@AndroidFindBy时,元素为Null,java,cross-browser,appium,Java,Cross Browser,Appium,我正在进行跨平台脚本编写,并且正在使用页面对象模型。我使用@AndroidFindBy(id=”“)/@iosFindBy(“”)注释来标识元素。我无法运行脚本,因为我遇到空指针异常 我调试后发现元素为Null。(请参考屏幕截图) 在初始化所需功能时,我已经初始化了我的驱动程序。但我不确定如何在驱动程序中查找元素 driver = new AndroidDriver<MobileElement>(url, desiredCapabilities); 但当我尝试使用@Android

我正在进行跨平台脚本编写,并且正在使用页面对象模型。我使用@AndroidFindBy(id=”“)/@iosFindBy(“”)注释来标识元素。我无法运行脚本,因为我遇到空指针异常

我调试后发现元素为Null。(请参考屏幕截图)

在初始化所需功能时,我已经初始化了我的驱动程序。但我不确定如何在驱动程序中查找元素

driver = new AndroidDriver<MobileElement>(url, desiredCapabilities);

但当我尝试使用@AndroidFindBy(id=”“)运行时,它失败了。我在哪里提到应该在哪里查找元素?我创建了一个包含类实例化的主页对象类,然后我创建的每个页面对象类都实现了下面所示的基本页面对象类:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.support.PageFactory;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.pagefactory.AppiumFieldDecorator;

public class PageObject {

    AndroidDriver<AndroidElement> driver;

    public PageObject(AndroidDriver<AndroidElement> driver) {

        this.driver = driver;
        PageFactory.initElements(new AppiumFieldDecorator(driver, 30, TimeUnit.SECONDS), this);

    }

}
import java.util.concurrent.TimeUnit;
导入org.openqa.selenium.support.PageFactory;
导入io.appium.java_client.android.AndroidDriver;
导入io.appium.java_client.android.AndroidElement;
导入io.appium.java_client.pagefactory.AppiumFieldDecorator;
公共类页面对象{
机器人驱动;
公共页面对象(AndroidDriver驱动程序){
this.driver=driver;
PageFactory.initElements(新的AppiumFieldDecorator(驱动程序,30,时间单位。秒),this);
}
}
您的问题可能很简单,因为您传递的类参数是硬编码的,可能是错误的类。它应该是页面对象的类本身,因此“this”

下面是page类的一段,它扩展了上面的page对象:

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.pagefactory.AndroidFindBy;

public class CalculatorPage extends PageObject {

    public CalculatorPage(AndroidDriver<AndroidElement> driver) {
        super(driver);
        System.out.println("Calculator page class has been initialized");
    }

    @AndroidFindBy(id = "com.android.calculator2:id/formula")
    AndroidElement formula;
    @AndroidFindBy(id = "com.android.calculator2:id/result")
    AndroidElement result;

    public String getResult() {
        String text = helper.getText(result, "Result");
        if ("".equals(text)) 
            text = helper.getText(formula, "Formula");
        return text;
    }

}
import io.appium.java_client.android.AndroidDriver;
导入io.appium.java_client.android.AndroidElement;
导入io.appium.java_client.pagefactory.AndroidFindBy;
公共类CalculatorPage扩展了PageObject{
公共计算器页面(AndroidDriver){
超级司机;
System.out.println(“计算器页面类已初始化”);
}
@AndroidFindBy(id=“com.android.calculator2:id/formula”)
雄激素公式;
@AndroidFindBy(id=“com.android.calculator2:id/result”)
雄激素结果;
公共字符串getResult(){
String text=helper.getText(结果,“结果”);
如果(“.”等于(文本))
text=helper.getText(公式,“公式”);
返回文本;
}
}

如何实例化该类?你在用pagefactory吗?引用POM的代码在哪里?hi@BillHileman,我正在使用pagefactory.Im在Page.java类中创建元素,并在PageTest.java中创建该类的对象。我正在初始化元素,
PageFactory.initElements(driver,BaseTest.class)在BaseTest类中,我初始化了所需的功能和驱动程序。感谢@BillHileman当我添加这行代码时,我得到另一个错误
公共类启动页{AppiumDriver driver;公共启动页(AppiumDriver driver){this.driver=driver;PageFactory.initElements(新AppiumFieldDecorator(driver,30,TimeUnit.SECONDS),this);}
org.testng.TestNGException:无法在org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:31)实例化类tests.LaunchPageTest原因:java.lang.reflect.InvocationTargetException原因:io.appium.java_client.pagefactory.AppIUMFieldCorator.getTypeForProxy(AppIUMFieldCorator.java:233)处io.appium.java_client.pagefactory.AppIUMFieldCorator.proxyForAnElement(AppIUMFieldCorator.java:248)处的java.lang.NullPointerException我刚刚重新查看了您的原始屏幕截图,注意到您的元素定义不太适合此设置。我必须在上午发布一个代码示例(我现在在家)显示我认为您的问题现在可能在哪里。我已将我的页面对象的一段添加到原始答案中。希望这能回答/帮助。我尝试过,但仍然在BasePage
PageFactory.initElements(新的AppiumFieldDecorator(驱动程序,30,TimeUnit.SECONDS),this)中的行中得到一个空指针;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.pagefactory.AndroidFindBy;

public class CalculatorPage extends PageObject {

    public CalculatorPage(AndroidDriver<AndroidElement> driver) {
        super(driver);
        System.out.println("Calculator page class has been initialized");
    }

    @AndroidFindBy(id = "com.android.calculator2:id/formula")
    AndroidElement formula;
    @AndroidFindBy(id = "com.android.calculator2:id/result")
    AndroidElement result;

    public String getResult() {
        String text = helper.getText(result, "Result");
        if ("".equals(text)) 
            text = helper.getText(formula, "Formula");
        return text;
    }

}