Тестирование пользовательского интерфейса Xcode — перетаскивание

Я пытаюсь создать XCTestCase для проверки изменения порядка в моем представлении схемы (в приложении OS X). Когда я использую функцию записи теста пользовательского интерфейса, Xcode печатает это:

window.outlines.staticTexts["<cell which I want to move>"].click()

Я попытался перетащить ячейку как внутрь, так и за пределы контура, Xcode генерирует один и тот же бесполезный код.

Кто-нибудь знает, как правильно проверить перетаскивание в Xcode 7?


person egor.zhdan    schedule 19.08.2015    source источник
comment
Вы пробовали public func pressForDuration(duration: NSTimeInterval, thenDragToElement otherElement: XCUIElement)   -  person Nick McConnell    schedule 29.09.2015
comment
@NickMcConnell, такого метода нет. Боюсь, это доступно только на iOS.   -  person egor.zhdan    schedule 29.09.2015
comment
Извините, я не мог помочь   -  person Nick McConnell    schedule 29.09.2015


Ответы (4)


Не уверен, что это ново, но в Xcode 7.2, если вы посмотрите на заголовок для XCUIElement, есть функция clickForDuration(thenDragToElement:) для OS X. Кажется, у меня работает с NSOutlineView.

Это из шапки...

/*!
 * Clicks and holds for a specified duration (generally long enough to start a drag operation) then drags
 * to the other element.
 */
public func clickForDuration(duration: NSTimeInterval, thenDragToElement otherElement: XCUIElement)
person harrisg    schedule 07.01.2016
comment
Работает как шарм, спасибо! Раньше не видел эту функцию, возможно, она была добавлена ​​в Xcode 7.2. - person egor.zhdan; 07.01.2016
comment
Также работает с Xcode 8/Swift 3, но функция: func press(forDuration duration: TimeInterval, thenDragTo otherElement: XCUIElement). В Swift 2.3 это func pressForDuration(duration: TimeInterval, thenDragToElement otherElement: XCUIElement) - person Daniel; 26.09.2016

С Xcode 9.4.1 Swift:

func press(forDuration duration: TimeInterval, thenDragTo otherElement: XCUIElement)

Пример:

let ele: XCUIElement = XCUIApplication()!.otherElements.matching(identifier: "element_identifier").element(boundBy: 0)
ele.press(forDuration: <timeIntervalInSec>, thenDragTo: <destination_XCUIElement>)

См.: Документация по API

person Sravan    schedule 12.09.2018

Та же проблема. Нет решения. Похоже, специальные возможности не поддерживают dnd, и в документах Apple говорится: Предоставьте альтернативы операциям перетаскивания.

person Daniel Wexler    schedule 22.12.2015

Единственное, что я могу предложить, это попробовать проверить специальные возможности тестируемого кода. Тестирование пользовательского интерфейса должно иметь информацию о доступности, чтобы иметь возможность понять, что происходит в пользовательском интерфейсе. См. видео о тестировании пользовательского интерфейса Apple WWDC15 примерно в 39:30 в видео для пример того, как исправить проблемы, когда запись пользовательского интерфейса не может правильно сгенерировать код.

person James C    schedule 16.10.2015