简体   繁体   中英

How can iOS 3D touch on app be automated?

I write Appium UI tests for my iOS app. Some of the tests have such workflow:

  1. an app is sent to background
  2. the user does "force touch" on the app's icon, until menu (shortcuts) appear
  3. an app is launched from this shortcut

My environment:

  • Simulator iOS 13.2
  • appium 1.15.0
  • Appium Python Client 0.47

I've tried such code (Python), it doesn't do "force touch":

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

(I've tried to adjust coords, eg (150,200), (260,400) - no app icon was pressed).

I've tried AppleScript, but all I can do now is to activate Simulator app. :)

What I've found but it's not working:

https://saucelabs.com/blog/how-to-automate-3d-force-touch-with-appium : in this post "press" command was used with "element" = AppName, but my selenium driver says "press" requires "x", "y", not "element"

https://developers.perfectomobile.com/display/TT/Using+iOS+3D+Touch : in this post, driver.executeScript("mobile:touch:tap", parms) is used, but my driver says there's no command "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.

I've looked at XCUITestDriver documentation/code, eg https://github.com/appium/appium-xcuitest-driver/blob/master/lib/commands/execute.js , and can't see any 3D-touch related stuff.

So do you know:
1. how to automate 3D-touch on app icon in iOS Simulator?
2. How to check if it's supported by XCUITest-Driver?
3. Can it be automated by smth like AppleScript?

Thanks in advance:)

If you mean like https://i.stack.imgur.com/3Fo7v.png , you can open it like below. (Ruby code)

# 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/ is the API. You can find Python, too.

(iOS 13 does not provide '3D touch'. The feature has been long-press style)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM