如何知道App导航到HomeActivity或LoginActivity-Appium

时间:2019-04-09 06:31:57

标签: c# testing automation appium

我正在使用 timestamp = "2019-02-16T10:41:20.6080000+01:00" cleaned_timestamp = re.sub('(\d{6})\d(\+\d{2})(:)(\d{2})', r'\1\2\4', timestamp) parsed_timestamp = datetime.datetime.strptime(cleaned_timestamp, "%Y-%m-%dT%H:%M:%S.%f%z") parsed_timestamp 测试我的移动应用。应用启动时,有时会直接导航到datetime.datetime(2019, 2, 16, 10, 41, 20, 608000, tzinfo=datetime.timezone(datetime.timedelta(0, 3600))) (如果用户已经登录)。如果用户未登录,则打开Appium

那么,我怎么知道哪个HomeActivity开始?这样我就可以相应地执行注销代码。

此代码根本无法执行,因为应用直接导航到LoginActivity,而不是activity

HomeActivity

2 个答案:

答案 0 :(得分:1)

您需要一种将页面识别为主页或登录页面的方法。 如果您有权访问移动应用程序源代码,则可以为主页提供“ homePage” AutomationId,为登录页面提供“ loginPage” AutomationId。如果不可能,请开发人员为您添加它们。在您的appium代码中使用这些ID来唯一标识已加载的页面。

在您的appium代码中,这些是您需要执行的步骤:

  1. 启动您的应用:driver = new AndroidDriver<AndroidElement>(url, cap);

  2. 花一些时间来加载应用。

  3. 检查您所在的页面,例如通过检查这些页面的AutomationId或其他唯一值。

在测试脚本中,您可以这样做:

            try
            {
                control = driver.FindElementByAccessibilityId("loginPage");
            }
            catch (Exception ex)
            {
                // No login page found, your in the home page.
                // Code for logging out here.
            }

正如Suban Dhyako已经建议的那样,页面对象设计模式是一个很好的实践。它使您的代码干净整洁,易于阅读。您可以详细了解here

答案 1 :(得分:1)

如果您始终想在全新的应用中进行测试,则可以在DesiredCapabilities中添加 noReset = false 功能。

如果要检查哪个屏幕可见,homeActivityScreen和LoginActivityScreen中必须有唯一的元素或ID。然后,您可以使用 isDisplayed()函数。

如果您使用页面对象模型,则很容易检查哪个屏幕是“显示”。

  

我将用Java代码显示页面对象模型的示例。希望您可以将其转换为C#代码

public class HomeActivityScreen {
    //you can use accessibility, id or xpath

    @AndroidFindBy(id = " your element id")
    private MobileElement element1;

    @AndroidFindBy(id = "element id")
    private MobileElement element2;

    public HomeActivityScreen(AppiumDriver<MobileElement> driver) {
        PageFactory.initElements(new AppiumFieldDecorator(driver), this);
    }

    public boolean isScreenDisplayed() {
        try {
            return element1.isDisplayed();
        } catch (Exception e) {
            return false;
        }
    }
}

类似地,您可以为其他屏幕添加页面对象模型。然后在测试课程中,您可以检查哪个屏幕可见

 HomeActivityScreen homeScreen = new HomeActivityScreen(driver);
 LoginActivityScreen loginScreen = new LoginActivityScreen(driver);

 if(homeScreen.isScreenDisplayed){
     //write your code
 }else if(loginScreen.isScreenDisplayed){
     //write logout code
 }else{
   //none of above screen is visible
 }