大家好,我正在使用TestNG和Page Object Factory练习移动应用程序自动化。不幸的是,脚本无法找到移动元素。请找到以下代码段,并让我知道您的输入以解决问题。
依赖:
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
</dependency>
测试类别:
public class LoginTest extends Demo
{
static AppiumDriver<MobileElement> driver =null;
@BeforeMethod
public static void androidSetUp() throws MalformedURLException {
DesiredCapabilities caps = new DesiredCapabilities();
String appPath = "/Users/hnum/Desktop/MobileAutomation/MobileAutomation/Resources/MG.apk";
File app = new File(appPath);
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "emulator-5554");
caps.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
caps.setCapability(MobileCapabilityType.UDID, "emulator-5554");
caps.setCapability("appWaitDuration",20000);
caps.setCapability("appWaitForLaunch",false);
caps.setCapability("autoGrantPermissions",true);
driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"),caps);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
System.out.println("Execution started");
}
@Test
public static void Login() throws InterruptedException {
Thread.sleep(20000);
System.out.println("Test Execution started");
SelectEnvironment_Page selectEnvironment_Page = new SelectEnvironment_Page(driver);
selectEnvironment_Page.dropDown_Select_Environment_click();
}
}
页面类别:
**Page Class:**
public class SelectEnvironment_Page
{
static public AppiumDriver<MobileElement> driver;
public SelectEnvironment_Page(AppiumDriver<MobileElement> driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver,Duration.ofSeconds(10)), SelectEnvironment_Page.class);
}
@AndroidFindBy(accessibility = "EnvironmentPopUpSelectEnvironmentLabel")
MobileElement txt_Select_Environment;
@AndroidFindBy (xpath = "//android.widget.Button[@text='Change Environment']")
MobileElement dropDown_Select_Environment;
@AndroidFindBy(xpath = "//android.widget.TextView[@text='QA']")
MobileElement QAEnvironment;
@AndroidFindBy(accessibility = "EnvironmentPopUpChangeEnvironmentButton")
MobileElement btnChangeEnvironment;
public void txt_Select_Environment_Visible(){
txt_Select_Environment.isDisplayed();
}
public void dropDown_Select_Environment_click(){
dropDown_Select_Environment.click();
}
public void QAEnvironment_click() {
QAEnvironment.click();
}
public void btnChangeEnvironment_click() {
btnChangeEnvironment.click();
}
}
得到下面的错误:
开始执行
测试执行已开始
失败:登录
java.lang.NullPointerException:无法调用“io.appium.java_client。MobileElement.click()“ 因为 ”this.dropDown_Select_Environment“ 在 Pages.SelectEnvironment_Page.dropDown_Select_Environment_click(SelectEnvironment_Page.java:55) at TestCases.LoginTest.Login(LoginTest.java:62) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:577) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133) at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598) at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173) at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46) at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824) at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146) atorg.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.testng.TestRunner.privateRun(TestRunner.java:794) at org.testng.TestRunner.run(TestRunner.java:596) at org.testng.SuiteRunner.runTest(SuiteRunner.java:377) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371) atorg.testng.SuiteRunner.privateRun(SuiteRunner.java:332) at org.testng.SuiteRunner.run(SuiteRunner.java:276) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212) at org.testng.TestNG.runSuitesLocal(TestNG.java:1134) at org.testng.TestNG.runSuites(TestNG.java:1063) at org.testng.TestNG.run(TestNG.java:1031) atorg.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
问题得到了解决,因此长此一问。
解决方法:它是Java,Appium Java客户端版本不匹配。现在,我能够使用pom方法找到元素。目前它适用于以下依赖版本:
Java版本:11.0.15.1
Java-客户端:7.6.0
硒-爪哇:3.141.59
测试:7.4.0