大家好,我正在使用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
问题内容: 请解释webdriver页面工厂概念中@FindAll和@FindBys批注之间的区别。 问题答案: 当我们具有多个标准来标识一个或多个WebElement对象时,可以在这些情况下使用这些注释。 @FindBys: 当所需的WebElement对象需要匹配所有给定条件时,请使用@FindBys批注 @FindAll: 必要时,WebElement对象需要至少匹配给定条件之一,请使用@F
创建基类: 然后初始化页面对象: 然后创建测试用例: 输出: 请告诉我怎么了。
我在eclipse中签出了一个gradle项目,但它不能识别任何注释 其中配置是注释。 所有与注释对应的导入也失败,错误如下: 包含所有文件的整个项目将填充错误。但在Intellij中,同样的项目不存在这样的问题。我错过了Eclipse的哪一个设置? gradle build工作很好,尽管
我正在android的clock应用程序上尝试一段appium自动化代码,但我的代码倾向于跳过滚动逻辑。我还尝试了findelement()和gettext()来标识该元素,但仍然没有成功。代码如下:
我是一名新的测试工程师,一直在阅读页面对象模型并实现它们,并不断遇到页面工厂。我知道页面工厂是一个POM,它提供了额外的功能,例如在调用页面工厂时实例化所有元素,以及更可读的测试代码(尽管我不完全赞同可读性)。明确地说,我对POM很感兴趣。代码的可重用性和相对容易的维护非常好,我正在朝着这个方向努力。 我要回答的两个问题是: 为什么我要实例化所有元素,而不是动态地进行
问题内容: 我刚刚开始在在线课程中学习Selenium Webdriver。 因为我是测试和Java编程的初学者,所以请帮我。 我试图运行自动化代码以在Facebook登录页面中自动填写用户名。最初运行该程序已成功输出。 但是在第二次尝试时,我遇到了以下错误 之后,我用Google搜索并找到了这个SO 问题,]复制 到我的代码中。 但是,我得到这个下面的错误。 我的问题是为什么Selenium驱动