使用@AndroidFindBy时,Element为Null

时间:2017-07-10 09:39:17

标签: java cross-browser appium

我正在开发跨平台脚本,我正在使用页面对象模型。我正在使用@AndroidFindBy(id =“”)/ @iosFindBy(“”)注释来标识元素。我得到空指针异常时无法运行我的脚本。

我调试并发现该元素为Null。 (请参阅截图) enter image description here

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

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

当我只使用AndroidDriver并使用

时,代码工作正常
driver.findElement(By.id(""))

但是当我尝试使用@AndroidFindBy(id =“”)运行时,它失败了。我在哪里提到应该查看元素的位置?任何单挑或指导都将不胜感激

1 个答案:

答案 0 :(得分:1)

我创建了一个包含类实例化的主页面对象类,然后我创建的每个页面对象类实现了如下所示的基页对象类:

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);

    }

}

您的问题可能很简单,因为您传递的类参数是硬编码的,可能是错误的类。它应该是页面对象的类本身,因此“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;
    }

}