我正在开发跨平台脚本,我正在使用页面对象模型。我正在使用@AndroidFindBy(id =“”)/ @iosFindBy(“”)注释来标识元素。我得到空指针异常时无法运行我的脚本。
我在初始化desiredCapabilities时已经初始化了我的驱动程序。但我不确定如何在驱动程序中查找元素。
driver = new AndroidDriver<MobileElement>(url, desiredCapabilities);
当我只使用AndroidDriver并使用
时,代码工作正常driver.findElement(By.id(""))
但是当我尝试使用@AndroidFindBy(id =“”)运行时,它失败了。我在哪里提到应该查看元素的位置?任何单挑或指导都将不胜感激
答案 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;
}
}