2017-10-09 37 views
0

我正在研究UI測試框架WebDriverAgent來自facebook。這非常棒,樂於助人。它幾乎包含iOS UI測試的所有知識。iOS UI中元素的lastSnapshot中子元素的屬性測試始終爲空,爲什麼?

XCTest有許多未公開的類和屬性。例如,XCUIElement有一個名爲lastSnapshot屬性,lastSnapshot還具有許多有用的特性,如標籤標識符孩子pathDescription,等。問題如下:

孩子屬性用於從某個元素中獲取所有子元素,就像從視圖中的子視圖一樣。但是,當我試圖從元素的lastSnapshot中獲取子項的值時,它始終爲空。雖然我可以正確地得到其他屬性的值,如標籤,標識符,父母等,這讓我困擾了好幾天。這裏的exapmle代碼:

- (void)testExample { 
    XCUIApplication *app = [[XCUIApplication alloc] init]; 
    XCUIElement *windowElement = [app.windows elementBoundByIndex:2]; 
    XCUIElement *statusBarElement = [windowElement.query elementBoundByIndex:0]; 
    XCUIElement *otherElement = [statusBarElement.query elementBoundByIndex:1]; 
    XCUIElement *timeElement = [otherElement.query elementBoundByIndex:2]; 

    [timeElement query]; 
    [timeElement resolve]; 
    NSLog(@"lastSnapshot = %@", timeElement.lastSnapshot); 
    NSLog(@"children = %@", timeElement.lastSnapshot.children); 
} 
+0

在研究WebDriverAgent之前,我使用了一個XCUIElement類來遞歸元素樹: –

回答

0

STUDING WebDriverAgent之前,我用XCUIElement的一類遞歸元素樹:

- (XCUIElementNode *)recursiveUIElementsWithLevel:(NSInteger)elementLevel { 
    XCUIElementNode *node = [XCUIElementNode new]; 
    node.elementLevel = elementLevel; 
    node.elementValue = self; 
    NSArray *arrayNotIncludeSelf = [self recursiveUIElementsNotIncludeSelfWithLevel:elementLevel]; 
    node.subNodes = [NSMutableArray arrayWithArray:arrayNotIncludeSelf]; 

    return node; 
} 

- (NSArray *)recursiveUIElementsNotIncludeSelfWithLevel:(NSInteger)elementLevel { 
    NSMutableArray *elementArray = [NSMutableArray new]; 

    XCUIElementQuery *childrenQuery = [self childrenMatchingType:XCUIElementTypeAny]; 

    for (NSUInteger elementIndex = 0; elementIndex < childrenQuery.count; elementIndex ++) { 
     XCUIElement *element = [childrenQuery elementBoundByIndex:elementIndex]; 
     XCUIElementNode *subNode = [XCUIElementNode new]; 
     subNode.elementLevel = elementLevel + 1; 
     subNode.elementValue = element; 
     subNode.subNodes = [NSMutableArray arrayWithArray:[element recursiveUIElementsNotIncludeSelfWithLevel:subNode.elementLevel]]; 
     [elementArray addObject:subNode]; 
    } 

    return [NSArray arrayWithArray:elementArray]; 
} 

它通過這種方式doese工作,但遞歸遍歷經驗需要很多時間不能被接受。

+0

如果升級到Xcode 9和iOS 11模擬器,查詢時間已經過優化,因此快照和重複遍歷不再那麼慢。 – Oletha

+0

我在升級到Xcode 9和iOS 11模擬器後再次嘗試,它仍然非常緩慢地通過childrenMatchingType類遍歷子元素: –