如何在IOS应用程序中识别屏幕名称或视图控制器

时间:2016-09-28 08:59:19

标签: ios automation appium-ios

我使用Appium自动执行IOS app测试用例。我有一个场景,我必须确定..我在哪个屏幕上,以便我可以关闭屏幕

从更广泛的角度来看,我们的应用程序中有一个inapp通知,可以随机打开。

如果能够识别当前屏幕,我可以处理这些情况。 我使用driver.currentActivity方法在Android中处理同样的事情

我需要为IOS应用程序提供某种相同的方法

1 个答案:

答案 0 :(得分:-2)

使用以下方法

获得最顶层的视图控制器
+ (UIViewController*) topMostController
{
    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

    while (topController.presentedViewController) {
    topController = topController.presentedViewController;
}

return topController;

}

或者,如果您有导航或UIabbar控制器,则使用以下方法获取可见的视图控制器

- (void)applicationWillResignActive:(UIApplication *)application
{
    UIViewController *vc = [self visibleViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}

- (UIViewController *)visibleViewController:(UIViewController *)rootViewController
{
if (rootViewController.presentedViewController == nil)
{
    return rootViewController;
}
if ([rootViewController.presentedViewController isKindOfClass:[UINavigationController class]])
{
    UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController;
    UIViewController *lastViewController = [[navigationController viewControllers] lastObject];

    return [self visibleViewController:lastViewController];
}
if ([rootViewController.presentedViewController isKindOfClass:[UITabBarController class]])
{
    UITabBarController *tabBarController = (UITabBarController *)rootViewController.presentedViewController;
    UIViewController *selectedViewController = tabBarController.selectedViewController;

    return [self visibleViewController:selectedViewController];
}

UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController;

return [self visibleViewController:presentedViewController];

}