2017-02-17 40 views
1

最近我頭痛得厲害(而且我還在掙扎中)想要找出如何檢索UIPickerWheel中的所有值。對我來說應該足以在特定的輪子上移動,但我不能!太令人沮喪了!我試圖逐行滾動檢索所有值(https://stackoverflow.com/a/39300344/821407),但速度很慢!任何線索?UIPickerView和UI單元測試:如何獲取UIPickerWheel的值?

注意:我不能使用adjustToPickerWheelValue,因爲我的根問題是我不知道這個值,因爲它們是動態的,我想避免launchArguments/launchEnvironment。

回答

2

這可能不是您希望的答案,但不可能在UITest中獲得UIPickerView中的所有行的標題。

正如您在運行UITest時所瞭解的,您只能通過XCUIElement類訪問您的應用的UI元素。該類有一個value屬性,它爲您提供有關您訪問的UI元素的一些信息。當訪問UIPickerView時,value會爲您提供當前所選行的標題。但僅限於選定的行。您可以訪問選取器的行元素,但不幸的是行元素的value屬性始終爲空。所以,這裏沒有運氣。所有你可以得到的信息是你的選擇器的行數。

雖然這並不令人驚訝。即使您有權訪問UIPickerView,也無法直接訪問所有行的標題。 UIPickerView不知道它顯示的標題。提供標題是UIPickerViewDataSource的工作。

因此,不幸的是,如果您需要知道UITest中UIPickerView的所有行標題,您必須通過應用程序的用戶界面逐一選擇每個值。

但它不必像您鏈接的答案那樣複雜。相反,模擬滾動,你可以在下一行簡單地點擊選擇它的(應該是稍快):

let pickerView = app.pickerWheels.element 
let numRows = pickerView.children(matching: .any).count 
var values: [String] = [pickerView.value as! String] 

for _ in 0..<numRows { 
    pickerView.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.55)).tap() 
    values.append(pickerView.value as! String) 
} 

在你的問題,你真的不形容你想考什麼。但是如果你想測試一下picker是否有正確的行標題,那麼也許UnitTest會是一個更實用的方法?

+0

感謝您的回答,我非常感謝。我解釋了我想測試的內容:UIPickerView位於搜索表單上,我必須點擊它,選擇一個隨機值並執行搜索,然後執行一些斷言。問題在於picker視圖中的值是動態的,所以我不提前知道這些值。我記得使用自動化儀器中的舊工具,您可以通過索引訪問特定的行。無論如何,我會接受你的回答,因爲是我所做的,但它仍然很慢。我希望他們能夠改進,我可以通過索引調整值 –