Invoke :hover state in Safari/iOS

I’m using Appium and Appium Java client for a web-based app testing using Safari on iOS. The app has some dropdown menus implemented using CSS :hover selector, i.e. the menu itself is hidden until mouse cursor hovers over the menu activation button. This works just fine with smartphone browsers (or any touch-based browser, actually) as well - instead of hovering the cursor you just tap the menu button.

This approach (clicking the element to display the menu) also works with all the desktop/mobile browsers except Safari on iOS (Safari on macOS works fine) - clicking the element here does nothing, the menu is not displayed. It works ‘manually’ - when you actually tap the button on the device/simulator the menu pops up - but not from within the test.

I’ve been considering using the TapOptions but this doesn’t seem to work with a WebElement from Safari. The only thing that works is directly specifying the coordinates of the tap. But this isn’t an option since there’s no way of calculating the element position in context of the browser frame and status bar. Or am I wrong?

I’d like to discuss what options are there to invoke :hover status of an element inside Safari.

The test environment:

  • java client build version: 6.1.0
  • Appium server version: 1.8.2-beta
  • Desktop OS/version: macOS 10.13.6
  • Node.js version: 8.11.3
  • Mobile platform/version under test: iOS 11.1
  • Real device or emulator/simulator: simulator

Thank you for any hint!