Как можно автоматизировать iOS 3D Touch в приложении?

Я пишу тесты Appium UI для своего iOS-приложения. Некоторые из тестов имеют такой рабочий процесс:

  1. приложение отправляется в фоновый режим
  2. пользователь «принудительно прикасается» к значку приложения, пока не появится меню (ярлыки)
  3. приложение запускается с этого ярлыка

Моя среда:

  • Симулятор iOS 13.2
  • приложение 1.15.0
  • Appium Python-клиент 0.47

Я пробовал такой код (Python), он не выполняет «принудительное касание»:

self.driver.background_app(-1) # this works: sends an app to backround
args = {'duration': 5, 'x': 200, 'y': 200}
self.driver.execute_script("mobile:touchAndHold", args) # this doesn't work: force touch on Home screen

(Я пытался настроить координаты, например (150 200), (260 400) - значок приложения не нажимался).

Я пробовал AppleScript, но все, что я могу сделать, это активировать приложение Simulator. :)

Что я нашел, но это не работает:

https://saucelabs.com/blog/how-to-automate-3d-force-touch-with-appium: в этом посте команда «press» использовалась с «element» = AppName, но мой драйвер селена говорит, что «press» требует «x», «y» , а не "элемент"

https://developers.perfectomobile.com/display/TT/Using+iOS+3D+Touch: в этом посте используется driver.executeScript("mobile:touch:tap", parms), но мой драйвер говорит, что нет команды "mobile:touch:tap":

selenium.common.exceptions.WebDriverException: Message: Unknown mobile command 'touch:tap'. Only scroll, swipe, pinch, doubleTap, twoFingerTap, touchAndHold, tap, dragFromToForDuration, selectPickerWheelValue, alert, setPasteboard, getPasteboard, source, getContexts, installApp, isAppInstalled, removeApp, launchApp, terminateApp, queryAppState, activateApp, viewportScreenshot, startPerfRecord, stopPerfRecord, installCertificate, startLogsBroadcast, stopLogsBroadcast, batteryInfo, deviceInfo, activeAppInfo, pressButton, enrollBiometric, sendBiometricMatch, isBiometricEnrolled, clearKeychains, getPermission, siriCommand commands are supported.

Я просмотрел документацию/код XCUITestDriver, например. https://github.com/appium/appium-xcuitest-driver/blob/master/lib/commands/execute.js и не видит ничего, связанного с 3D-касанием.

Итак, знаете ли вы:
1. как автоматизировать 3D-касание значка приложения в симуляторе iOS?
2. Как проверить, поддерживается ли XCUITest-Driver?
3. Можно ли автоматизировать что-то вроде AppleScript?

Заранее спасибо :)


person Olha    schedule 19.11.2019    source источник


Ответы (1)


Если вы имеете в виду как https://i.stack.imgur.com/3Fo7v.png, вы можете открыть его, как показано ниже. (рубиновый код)

# Long press 'Contacts' icon with W3C actions
el = @driver.find_element :name, 'Contacts'
action_builder = @driver.action
action_builder.move_to(el)
              .pointer_down(:left)
              .pause(action_builder.pointer_inputs[0], 2)
              .pointer_up(:left).perform

https://appium.io/docs/en/commands/interactions/actions/ — это API. Вы также можете найти Python.

(iOS 13 не обеспечивает «3D Touch». Эта функция была в стиле длительного нажатия)

person Kazuaki Matsuo    schedule 20.11.2019