В моем приложении я разрешаю пользователю перетаскивать элементы из Finder (или любого другого источника URL-адреса на основе файла) в мое приложение. Я хочу добавить механизм, который позволит мне проверить это в тестировании пользовательского интерфейса Xcode.
Я вижу, как использовать XCUIElement.press(forDuration:thenDragTo:)
для проверки перетаскивания источника и места назначения внутри приложение, но мне не удалось найти способ проверить, когда источник перетаскивания находится за пределами приложения.
В несколько похожем тесте я тестирую часть приложения для копирования и вставки, установив строку, которую я хочу вставить в NSPasteboard.general
, а затем используя XCUIElement.typeKey("v", modifierFlags: .command)
, чтобы вставить ее в нужный элемент. Это немного меньше, чем идеально, поскольку это зависит от того, действительно ли Command-v реализована как команда paste, но вряд ли это изменится, поэтому это приемлемо для моих нужд. (На самом деле я написал расширение XCUIElement.paste(_ s: String)
, которое упрощает мне добавление его в тест.)
Я считаю, что перетаскивание также использует NSPasteboard
для обмена данными, поэтому После небольшого исследования механизма, лежащего в основе, я смогу поместить свой объект на правильный монтажный стол, как я это делаю для вырезания и вставки. Я достаточно уверен, что смогу понять эту часть. Но я не понял, как выполнить сброс.
Моей целью было бы создать XCUIElement.drop(_ url)
, который установил бы правильный объект «publi c .file-url» на правильном монтажном столе. , а затем смоделировать / выполнить падение в элемент.
Есть идеи?
Следует отметить, что я уже пробовал следующие два элемента:
Во-первых, я сделал используйте функцию записи Xcode, чтобы попытаться записать операцию перетаскивания и посмотреть, какие события она мне даст. К сожалению, он абсолютно ничего не записывает.
Во-вторых, у меня есть альтернатива на основе меню, когда пользователь выбирает файл с помощью селектора файлов. Так что, если бы я мог смоделировать выбор файла, это было бы подходящей альтернативой тестирования для моих целей. К сожалению, я тоже не продвинулся по этому пути. Когда я использовал Xcode для записи событий, он записывал выбор меню, ничего, что на самом деле не было сделано в диалоговом окне.