appium - Appium - PageFactory initElements 不工作
问题描述
我有这个类作为我的页面对象:
public class LaunchPageObject {
private AppiumDriver<AndroidElement> driver;
public LaunchPageObject() {
}
public LaunchPageObject(AppiumDriver<AndroidElement> driver) {
this.driver=driver;
PageFactory.initElements(new AppiumFieldDecorator(this.driver), this);
}
public void Click_SigninNow() {
lnk_SigninNow.click();
}
@AndroidFindBy(xpath="//android.widget.Button[@text='LOGIN WITH FACEBOOK']")
MobileElement btn_SignupWithEmail;
@AndroidFindBy(xpath="//android.widget.Button[@text='SIGN UP WITH EMAIL']")
MobileElement btn_LoginWithFacebook;
@AndroidFindBy(xpath="//android.widget.TextView[@text='Sign in now']")
MobileElement lnk_SigninNow;
}
我有这个类作为我的测试用例类:
public class LaunchPageTest extends Android {
@Test
public void Click_SigninNow() throws MalformedURLException {
LaunchPageObject lp = new LaunchPageObject(setDriver());
lp.Click_SigninNow();
}
}
我有这个错误日志:
失败:在 io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:33) 处的 io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:52) 处的 Click_SigninNow java.lang.ExceptionInInitializerError在 io.appium.java_client.pagefactory.AppiumFieldDecorator.proxyForAnElement(AppiumFieldDecorator.java:217) 在 io.appium.java_client.pagefactory.AppiumFieldDecorator.access$0(AppiumFieldDecorator.java:215) 在 io.appium.java_client.pagefactory.AppiumFieldDecorator$1 .proxyForLocator(AppiumFieldDecorator.java:107) 在 org.openqa.selenium.support.pagefactory.DefaultFieldDecorator.decorate(DefaultFieldDecorator.java:62) 在 io.appium.java_client.pagefactory.AppiumFieldDecorator.decorate(AppiumFieldDecorator.java:155) 在org.openqa.selenium.support。PageFactory.proxyFields(PageFactory.java:113) 在 org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:105) 在 POM.LaunchPageObject.(LaunchPageObject.java:35) 在 TestCases.LaunchPageTest.Click_SigninNow(LaunchPageTest. java:17) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
测试会打开应用程序,但无法单击元素。知道这里发生了什么吗?
解决方案
保留您的页面对象和测试类,如下所示
public class LaunchPageObject {
@AndroidFindBy(xpath="//android.widget.Button[@text='LOGIN WITH FACEBOOK']")
MobileElement btn_SignupWithEmail;
@AndroidFindBy(xpath="//android.widget.Button[@text='SIGN UP WITH EMAIL']")
MobileElement btn_LoginWithFacebook;
@AndroidFindBy(xpath="//android.widget.TextView[@text='Sign in now']")
MobileElement lnk_SigninNow;
public void click_SigninNow() {
lnk_SigninNow.click();
}
}
public class LaunchPageTest extends Android {
LaunchPageObject lp = PageFactory.initElements(getDriver(), LaunchPageObject.class);
@Test
public void Click_SigninNow() throws MalformedURLException {
lp.Click_SigninNow();
}
}
推荐阅读
- java - 在 dateTimeFormat 之后年份更改为 0000
- amazon-ecs - 将自定义 conf 文件传递给 ECS 任务定义
- c# - LogMeIn GoToWebinar SDK 响应 403 Access denied
- reactjs - 无法解析 Firebase 配置文件 React
- ios - 如何在屏幕上快速显示数据
- java - 打开 zip 文件时出错或缺少 JAR 清单:build/tmp/expandedArchives/org.jacoco.agent
- c# - 在嵌套控件 (WinForm) 上运行时访问值
- javascript - 文档未在 javascript 上定义
- javascript - Onclick 图像切换图像 src
- javascript - 如何使用 java 脚本或 Vue js 在 Web 浏览器(而不是移动设备)中获取准确的位置坐标