2017-04-20 115 views
0

在關於Xcode中UI測試的WWDC會話中,您可以瞭解到在實際合成屬性或讀取值時對查詢進行評估。防止重新評估XCUIElementQuery

那麼何時對查詢進行評估?所以他們並沒有實際評估,只是當你創建它們。

它們按需或按需要進行評估。這意味着使用元素時,將在合成事件或讀取屬性值時評估查詢。

您可以創建該元素,但在您使用它之前,不會評估該查詢。同樣,如果您直接創建查詢,則會在您獲得匹配數時或者您調用返回所有匹配的API之一時對其進行評估。它將不得不在這一點上進行評估,我們將在UI更改時重新評估查詢。因此,根據測試的長度,您總是使用最新的應用程序視圖,而不是十秒前或兩分鐘前的數據。所以通過這種方式,您可以將查詢和元素與URL有點類似。

這是非常好的事,以確保您正在使用最新的UI狀態,但它可能會非常緩慢,並阻止您執行需要高速度的測試。看到以下內容:

CFTimeInterval startTime = CACurrentMediaTime(); 
XCUIElement *button = [[XCUIApplication alloc] init]/*@[email protected]*/.scrollViews/*[[".windows[@\"\\n[FYB Debug]: Reachability Flag Status: -R t------ networkStatus\"].scrollViews",".scrollViews"],[[[-1,1],[-1,0]]],[0]]@[email protected]*/.otherElements.buttons[@"StartSDK_Button"]; 
[button tap]; 
[button tap]; 
[button tap]; 
[button tap]; 
[button tap]; 
CFTimeInterval endTime = CACurrentMediaTime(); 

NSLog(@"EXECUTION TIME = %f", endTime - startTime); 

2017-04-20 11:04:03.381102+0800 XCTRunner[6368:854885] EXECUTION TIME = 5.619870 

所以我想知道,有沒有辦法在測試過程中暫時改變這種行爲和查詢元素只有一次?

回答

0

我有一個類似的問題需要一個非常快速的垂直滑動在表視圖。沒有找到一種方法來加速使用XCTest框架的事件我最終構建了一個相當棘手的解決方法:而不是通過XCTest框架請求點擊/輕掃手勢,我正在發送請求到一個自定義開發的mac應用程序,它能夠控制鼠標主機的指針。 如果您只在模擬器上進行測試,它將會非常好用,易於使用。

的樣品測試,將重複輕按XCUIElement

func testMultipleTap() { 
    let app = XCUIApplication() 
    app.launch() 

    host.connect() 

    let btn = app.buttons["mybutton"] 

    let mouseClick = SBTUITunneledHostMouseClick(element: btn, completionPause: 0.05) 

    let mouseCliks = Array(repeating: mouseClick, count: 3) 
    host.execute(mouseCliks) 
} 

host是,允許你與Mac應用程序進行通信的對象。

該項目可在GitHub