2015-10-23 1 views
3

Есть ли способ в тестировании пользовательского интерфейса Xcode 7 для выбора третьей строки в UIPickerView?Тестирование пользовательского интерфейса в Xcode 7: выбор номера строки в UIPickerView/PickerWheel

Я пробовал различные вещи, как это определить строки в каждой палитре, но все запросы ниже возвращения 0 найдено:

XCUIApplication().pickers.element.cells.count 
XCUIApplication().pickers.element.staticTexts.count 

Есть идеи?

Обновлено: Мне известно о методе adjustToPickerWheelValue, где вы можете выбрать определенное значение, которое вы уже знаете, но я пытаюсь выбрать третье значение (index = 4), когда я не знаю значений, существующих в сборщике ,

ответ

2

Вы можете использовать -adjustToPickerWheelValue: для выбора товаров на UIPickerView.

Когда на экране есть один UIPickerView, вы можете выбрать элемент напрямую, как это.

let app = XCUIApplication() 
app.launch() 
app.pickerWheels.element.adjustToPickerWheelValue("Books") 

Если сборщика имеет несколько колес, нужно будет сначала выбрать колесо через его идентификатор доступности, а затем настроить его.

app.pickerWheels["Feet"].adjustToPickerWheelValue("5") 

Вот GitHub repo with a working example. И некоторые more information in a blog post I wrote.

+1

Извините, Джо. Мой вопрос был не совсем ясен. Я обновил его соответствующим образом. –

+4

Обратите внимание, что в текущей реализации 'adjustToPickerWheelValue' есть ошибка. Об этом есть радар: http://www.openradar.me/22918650 –

0

Пример с датой подборщика (UIDatePicker)

enter image description here

XCUIApplication().datePickers.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("March") 
XCUIApplication().datePickers.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("24") 
XCUIApplication().datePickers.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("2000") 

А вот пример с точки зрения Picker (UIPickerView)

enter image description here

XCUIApplication().pickerWheels.element.adjustToPickerWheelValue("Male") 
0

Обход:

let pickerWheel = XCUIApplication().pickers.pickerWheels.element 
let appWindowHeight = XCUIApplication().windows.elementBoundByIndex(0).frame.height 
let pickerWheelCellHeight = GFloat(44) 
    func advancePickerWheelOneValue() -> Self { 
     let topScrollPoint = Double(pickerWheel.frame.midY/appWindowHeight) 
     let bottomScrollPoint = Double((pickerWheel.frame.midY + pickerWheelCellHeight)/appWindowHeight) 
     let topScreenPoint = XCUIApplication().windows.elementBoundByIndex(0).coordinateWithNormalizedOffset(CGVector(dx: 0.5, dy: topScrollPoint)) 
     let bottomScreenPoint = XCUIApplication().windows.elementBoundByIndex(0).coordinateWithNormalizedOffset(CGVector(dx: 0.5, dy: bottomScrollPoint)) 
     bottomScreenPoint.pressForDuration(0, thenDragToCoordinate: topScreenPoint) 
     return self 
    } 

Возможно, вам потребуется отрегулировать значение dx в зависимости от того, где находится сборщик.

.coordinateWithNormalizedOffset(CGVector(dx: 0.5, 

Но 0.5 работает, если сборщик занимает ширину экрана.

С помощью этого метода вы перемещаете сборщик по значению за раз. Вызовите его несколько раз, и вы получите нужное значение.

Его не идеально, но он может помочь, если вы хотите проверить определенные индексы. Надеюсь, вам придется использовать его на сборщике с сотнями значений;)