Appium:第二次登录后无法在MainActivity上找到元素

时间:2018-04-09 09:07:33

标签: java android appium appium-android

我是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

  

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个

Appium Inspector上的

XML enter image description here

0 个答案:

没有答案