2017-01-12 65 views
2

我正在爲我的iOS應用程序實現UITests。 到目前爲止,我已經能夠做一些簡單的測試,但我已經到了一個tableView有兩個部分。每個部分都有一個包含靜態文本的sectionHeaderView,例如。 「第1部分」和「第2部分」,採用正常的部分標題樣式。如何正確使用XCTest尋找staticText

執行app.tables.staticTexts["SECTION 1"].exists時,返回true。這是第一部分,當視圖加載時在頂部可見。

執行相同操作時,對於「第2部分」,返回false。本節的SectionHeaderView在這個視圖之外,所以我認爲這是問題,但事實證明它不是.. 我試過app.swipeUp(),它成功地將第二部分帶入屏幕。在swipeUp之後,我睡了幾秒鐘以便視圖解決,並執行相同的檢查,但它無法找到第二個sectionView。

滾動下來之後,我試圖打印出app.tables.staticTexts.debugDescription看看它可以發現,這僅說明了第一部分,以及一個tableFooterView我在的tableView的最底部。

當我執行app.tables.staticTexts["SECTION 2"].exists時,我可以從字面上看到模擬器上的「SECTION 2」文本。然而這個測試並不存在。

爲什麼我的第二個SectionHeaderView對XCTest完全不可見?難道是因爲我特別禁用了這種視圖上的某種可訪問性變量?我找不到任何..

編輯,輸出:

t = 32.25s  Find: Descendants matching type Table 
    t = 32.26s  Find: Descendants matching type StaticText 
    t = 32.26s  Find: Elements matching predicate '"SECTION 1" IN identifiers' 
Found SECTION 1. Will scroll down to find Section 2. 
    t = 32.26s  Swipe up Target Application 0x6080000bbf60 
    t = 32.26s   Wait for app to idle 
    t = 32.30s   Find the Target Application 0x6080000bbf60 
    t = 32.30s    Snapshot accessibility hierarchy for my.bundle.identifier 
    t = 33.09s    Wait for app to idle 
    t = 33.14s   Synthesize event 
    t = 33.42s   Wait for app to idle 
Slept for 3 seconds. Have scrolled down. SECTION 2 in view now. 
    t = 38.86s  Snapshot accessibility hierarchy for my.bundle.identifier 
    t = 39.64s  Find: Descendants matching type Table 
    t = 39.65s  Find: Descendants matching type StaticText 
    t = 39.65s  Find: Elements matching predicate '"SECTION 2" IN identifiers' 
    t = 39.66s  Assertion Failure: MyUITests.swift:347: XCTAssertTrue failed - SECTION 2 does not exist 
    t = 39.66s  Tear Down 
+0

當你看第二部分頭,輸出是否說它使用緩存的快照/層次結構? – Oletha

+0

@Oletha否..查看更新後的問題。 – Sti

回答

0

一對夫婦的問題,因爲我不能評論尚未:(我最近一直在做UI測試的很多,所以我正在學習一點)

當您在刷完之後試圖斷言app.tables.staticTexts["SECTION 2"].exists並忽略「SECTION 1」標籤時會發生什麼?

sectionHeaderView的自定義子類嗎?

我發現指定特定視圖accessibilityIdentifier然後通過帶有該標識符的XCUIElement代理訪問它們會很有幫助。

此外,我最近發現的是,除非您使用UIAccessibilityContainer,指的是超級視圖的可訪問性特徵可以否定其子視圖的可訪問性特徵。

3

放置在你的代碼中設置斷點:

app.tables.staticTexts["SECTION 2"].exists 

當你點擊斷點類型到這個調試面板,並按下回車鍵:

po print(XCUIApplication().debugDescription) 

這會列出所有可用來XCUITest。在那裏尋找你的第二部分的文字。通常情況下,當我發生這種情況時,我拼錯了它,或者應用程序中的文本在某處存在額外的空間。使用.staticText時,它必須完全匹配。

1

我遇到了這個問題的表格頁腳。好像他們是爲「其他」的對象,而不是staticTexts處理,使下面的代碼應該工作:

XCTAssert(app.otherElements["SECTION 2"].exists) 

感謝hwpowers用於調試提示:

po print(XCUIApplication().debugDescription)