From ed5a8437354a2c443221579000e913a9aeb10935 Mon Sep 17 00:00:00 2001 From: Vyacheslav Frolov Date: Mon, 26 Aug 2019 12:15:55 +0200 Subject: [PATCH] Filter out system app when there are multiple active apps --- WebDriverAgentLib/FBApplication.m | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/WebDriverAgentLib/FBApplication.m b/WebDriverAgentLib/FBApplication.m index 47b75be32..a9ee7e875 100644 --- a/WebDriverAgentLib/FBApplication.m +++ b/WebDriverAgentLib/FBApplication.m @@ -36,7 +36,20 @@ + (instancetype)fb_activeApplication return [FBXCAXClientProxy.sharedClient activeApplications].count == 1; }]; - XCAccessibilityElement *activeApplicationElement = [[FBXCAXClientProxy.sharedClient activeApplications] firstObject]; + NSArray *activeApplicationElements = [FBXCAXClientProxy.sharedClient activeApplications]; + XCAccessibilityElement *activeApplicationElement; + + if (activeApplicationElements.count > 1) { + // Might be situations when firstObject is a system application — i.e. SpringBoard + XCAccessibilityElement *systemApplicationElement = [FBXCAXClientProxy.sharedClient systemApplication]; + NSPredicate *nonSystemApplicationPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { + return systemApplicationElement.processIdentifier != ((XCAccessibilityElement *)evaluatedObject).processIdentifier; + }]; + activeApplicationElement = [[activeApplicationElements filteredArrayUsingPredicate:nonSystemApplicationPredicate] firstObject]; + } else { + activeApplicationElement = [activeApplicationElements firstObject]; + } + if (!activeApplicationElement) { return nil; }