2017-04-25 16 views
2

我有這已經工作了近一年的一些UI測試,他們每天晚上運行我們設置了監視器,以便我們可以看到它們何時失敗,並且它們在數月和數月內都可以正常工作。由於從8.2升級到8.3.2的Xcode,我們的UI測試失敗,因爲UITableView中不再響應swipeUp()或swipeDown()

今天早上我們更新了我們的機器到Xcode 8.3.2和我們的生成服務器從8.2到8.3.2,現在UI測試不再通過了。

我有12個細胞在裏面,第一個6的tableView是可見的,但我想按最後一個單元格,所以我叫swipeUp()滾動的tableView。通常,tableView會滾動一兩秒鐘,我想要的單元格變得可見,我可以斷言它存在並在其上調用tap()。

但是現在,看着測試運行UI,當swipeUp()方法被調用,它不再滾動很長的時候。它似乎只滾動幾毫米,然後停止,這意味着斷言失敗,我們不能點擊單元格,所以我們所有的UI測試失敗。

我在網上搜索關於這一點,並不能找到除了this small snippet這似乎是有我同樣的問題多的信息。

我試圖爲建議刪除swipeUp()調用,但這似乎並沒有解決這個問題,我們已經在幾個Xcode的設備和筆記本電腦進行測試,以同樣的效果。

只是尋找一些建議,並想知道是否有其他人看到這個問題?

+0

你能否爲此提出一個雷達?使用8.3.2和8.2運行的輸出,謝謝! – czechboy

回答

4

這個問題有幾種可能的解決方案。

  1. tap()方法。當您使用tap()方法時,XCTestCase可以自動滾動到給定元素並點擊它。

    let predicate = NSPredicate(format: "label == %@", "12") 
    let cell = table.cells.containing(predicate).element 
    cell.tap() 
    
  2. 而不是使用swipeUp()方法,你可以使用XCUICoordinate.press(forDuration:thenDragTo:)的。這是有點棘手,因爲你必須在XCUICoordinate對象上工作。

    從底部滑動到頂部的示例用法:

    let bottom = table.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.9)) 
    let top = table.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.1)) 
    
    bottom.press(forDuration: 0.1, thenDragTo: top) 
    

    請注意值0.90.1

    • 如果使用1.0爲底值,你會打開控制中心
    • 如果您使用上述方法實施「swipeDown」,並使用0.0作爲頂點,您將打開通知中心
  3. 如果超過一個刷卡需要你可以使用while環(或類似)向上滾動直到電池將是可見的:

    let predicate = NSPredicate(format: "label == %@", "12") 
    let cell = table.cells.containing(predicate).element 
    while !cell.isHittable { 
        table.swipeUp() 
    } 
    

    當然,將需要一些其它的斷點條件;)

  4. 您可以使用AutoMate庫,它有輔助方法用於刷卡,如:swipe(to:)

    let predicate = NSPredicate(format: "label == %@", "12") 
    let cell = table.cells.containing(predicate).element 
    table.swipe(to: scrollPage.topButton) 
    

    此外,該庫可以處理其中一個鍵盤是可見的情況下,處理不同的設備取向(rdar://31529903gist)等等。

+0

任何想法爲什麼這發生在8.3.2?我想這仍然是一個謎。總之,對於'label == 12'這是如何工作的? 12簡單地翻譯爲rowNumber?第3節第5行怎麼辦? – Honey

+1

啊,對不起。我有一個示例應用程序,其中每個單元格都有一個帶有自己唯一編號的標籤作爲文本。在你的項目中,你必須爲細胞尋找獨特的東西。例如,它可以包含標籤中的文本。另外,你可以使用'table.cells.element(boundBy:12)'從表格視圖中獲得第12個單元格。與部分,總是有問題。我建議使用謂詞,它會找到你想要的單元格。如果你嘗試使用AutoMate,你可以使用'let cell = tableView.cells.element(containsLabels:[「name」:「John」])''。這段代碼將找到一個單元格,其中包含任何標識符爲'name'和標籤爲'John'的元素。 –

相關問題