我是Appium的新手。我正在测试应用程序并在第二次登录时尝试查找属于MainActivity的移动元素时遇到问题。
我的应用(跟踪器)的工作方式如下:
目前,为用户提供了用于登录的密码。当用户首次登录时,必须设置应用程序(在主活动页面上),启用VPN和应用程序使用权限。设置完成后,跟踪器就会启动并运行,并向用户显示一个可以停止/启动跟踪器的新页面(它也属于MainActivity页面)。简单。用户第二次登录或启动跟踪器时不需要设置,并且用户直接显示停止/启动跟踪器页面(属于主要活动页面)
情景1
如果用户从头开始使用该应用程序,我的测试工作正常: * 登录 *启用VPN *启用应用使用权限 *检查用户是否有启动/停止跟踪器阶段
@Test(enabled = true, priority=1)
public void basicTitleTest() throws java.lang.InterruptedException, MalformedURLException {
LoginActivity loginActivity = new LoginActivity(driver);
MainActivity mainActivity = new MainActivity(driver);
AndroidActivity androidActivity = new AndroidActivity(driver);
loginActivity.registerApp("******");
TimeUnit.SECONDS.sleep(5);
String current = driver.currentActivity();
System.out.println(current);
mainActivity.enableVPN();
mainActivity.clickOnOpenSettings();
androidActivity.enableSettings();
androidActivity.navigateBackToWakoopaApp();
mainActivity.verifyAppIsReady();
}
情景2
当我第二次登录时,它无法找到属于启动/停止跟踪器阶段的移动元素 * 登录 *检查用户是否有启动/停止跟踪器阶段
@Test(enabled = true, priority=1)
public void basicTitleTest() throws java.lang.InterruptedException, MalformedURLException {
LoginActivity loginActivity = new LoginActivity(driver);
MainActivity mainActivity = new MainActivity(driver);
String context = driver.getContext();
System.out.println(context);
loginActivity.registerApp("*******");
TimeUnit.SECONDS.sleep(5);
Set<String> contextNames = driver.getContextHandles();
int size = contextNames.size();
System.out.println(size);
mainActivity.verifyAppIsReady();
}
其中:
public void verifyAppIsReady () throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
assertTrue(stopTrackerButton.isDisplayed());
}
stopTrackerbutton具有唯一ID,它只能位于第一个场景中。 有什么想法吗?
错误日志 失败:basicTitleTest
Appium Inspector上的org.openqa.selenium.NoSuchElementException:找不到元素 这个策略:定位图: - 原生内容:&#34; By.chained({By.id:toggleStopStart})&#34; - html内容:&#34;按ID或名称&#34; stopTrackerButton&#34;&#34; at io.appium.java_client.pagefactory.AppiumElementLocator.findElement(AppiumElementLocator.java:102) 在 io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept(InterceptorOfASingleElement.java:61) 在 io.appium.java_client.android.AndroidElement $$ EnhancerByCGLIB $$ b598166c.isDisplayed() 在Pages.MainActivity.verifyAppIsReady(MainActivity.java:72)at Tests.TestLaura2.basicTitleTest(TestLaura2.java:69)at java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(母语 方法)at java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.base / java.lang.reflect.Method.invoke(Method.java:564)at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124) 在org.testng.internal.Invoker.invokeMethod(Invoker.java:580)at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) 在org.testng.TestRunner.privateRun(TestRunner.java:648)at org.testng.TestRunner.run(TestRunner.java:505)at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)at at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)at at org.testng.SuiteRunner.run(SuiteRunner.java:364)at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)at at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)at at org.testng.TestNG.runSuites(TestNG.java:1049)at org.testng.TestNG.run(TestNG.java:1017)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114) 在org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) 在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)引起 by:org.openqa.selenium.TimeoutException:预期条件失败: 等待 io.appium.java_client.pagefactory.AppiumElementLocator$WaitingFunction@4925f4f5 (尝试持续10秒,间隔500毫秒)at org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:303) 在 org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:271) 在 io.appium.java_client.pagefactory.AppiumElementLocator.waitFor(AppiumElementLocator.java:76) 在 io.appium.java_client.pagefactory.AppiumElementLocator.findElement(AppiumElementLocator.java:95) ... 29更多引起:org.openqa.selenium.NoSuchElementException: 无法使用By.chained({By.id:toggleStopStart})找到元素 有关此错误的文档,请访问: http://seleniumhq.org/exceptions/no_such_element.html构建信息: 版本:&#39; 3.11.0&#39;,修订版:&#39; e59cfb3&#39;,时间: &#39; 2018-03-11T20:26:55.152Z&#39;系统信息:主持人: &#39; bcnl-jmeunier.ad.netquest.com&#39;,ip: &#39; fe80:0:0:0:1cd6:7fc:4338:52b7%en0&#39;,os.name:&#39; Mac OS X&#39;,os.arch: &#39; x86_64&#39;,os.version:&#39; 10.13.3&#39;,java.version:&#39; 10&#39;司机信息: driver.version:AndroidDriver at io.appium.java_client.pagefactory.bys.builder.ByChained.findElement(ByChained.java:72) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:311) 在 io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:58) 在 io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 在 io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1) 在 io.appium.java_client.pagefactory.bys.ContentMappedBy.findElement(ContentMappedBy.java:36) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:311) 在 io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:58) 在 io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 在 io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1) 在 io.appium.java_client.pagefactory.AppiumElementLocator.lambda $ 0(AppiumElementLocator.java:96) 在 io.appium.java_client.pagefactory.AppiumElementLocator $ WaitingFunction.apply(AppiumElementLocator.java:150) 在 io.appium.java_client.pagefactory.AppiumElementLocator $ WaitingFunction.apply(AppiumElementLocator.java:1) 在 org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:248) ......还有31个