TAP in appium inspector clicks the button but nothing happens in UI screen

Using TAP in appium inspector (iOS platform) clicks the button (in Green color) but nothing happens in UI screen which support to navigate to different screen.

I am running appium desktop version 1.17.0 in mac. Launching app in iPad Air Simulator manually.
Tow Particular buttons with green color BG with button text ENTER and CHECK OUT are not working. Meaning when I manually TAP using the appium inspector screen, nothing happens. But when i tap in simulator it works fine and refresh in inspector it reflects.

But in other screens other buttons with green color background is working fine when I hit TAP manually after selecting the button in appium inspector, meaning UI renders in inspector itself.

NOTE:
1.This happens only in Tablet form factor (IPad Air, IPad similators) but works fine in Phone form factor (Iphone 8 simulator). Both have same iOS version 13.3
2.I have double checked the button instance is not repeated. Its only one unique button with text CHECK OUT

Environment

  • Appium version (or git revision) that exhibits the issue: 1.17.0
  • Last Appium version that did not exhibit the issue (if applicable):
  • Desktop OS/version used to run Appium: MAC OS MOJAVE version 10.14.6
  • Node.js version (unless using Appium.app|exe): Using appium Desktop
  • Npm or Yarn package manager: npm version 3.10.10
  • Mobile platform/version under test: iOS 13.3
  • Real device or emulator/simulator: iPad Air Simulator (Please refer Note above)
  • Appium CLI or Appium.app|exe: Appium desktop

Details

{
“platformName”: “iOS”,
“deviceName”: “iPad Air”,
“automationName”: “XCUITest”,
“app”: “/Users/Username/Desktop/XXXX.app”,
“udid”: “5517A994-0BC8-41B4-XXXX-7E5FDBDB3E39”,
“platformVersion”: “13.3”,
“bundleId”: “com.xxxx.app”
}

This happens only in Tablet form factor (IPad Air, IPad similators) but works fine in Phone form factor (Iphone 8 simulator). Both have same iOS version 13.3

Link to Appium logs

[{“key”:“elementId”,“value”:“D3000000-0000-0000-820E-010000000000”,“name”:“elementId”},{“key”:“type”,“value”:“XCUIElementTypeButton”,“name”:“type”},{“key”:“name”,“value”:“CHECK OUT”,“name”:“name”},{“key”:“label”,“value”:“CHECK OUT”,“name”:“label”},{“key”:“enabled”,“value”:“true”,“name”:“enabled”},{“key”:“visible”,“value”:“true”,“name”:“visible”},{“key”:“x”,“value”:“230”,“name”:“x”},{“key”:“y”,“value”:“602”,“name”:“y”},{“key”:“width”,“value”:“130”,“name”:“width”},{“key”:“height”,“value”:“50”,“name”:“height”}]


image

You could try to tapping the point ‘on top’ of the button,
I have found that iOS buttons that have that slight bevel can sometimes have the tappable area for the button inside the UI of the button. The default touch location is 0,0 of the element. So using a touch action with a x y alter can help with those cases I have found.

Uses an Appium TouchAction with the described points, potentially with an offset.

# Mimics '.click' but does not need an element, but could pass in element.location to do it, or just [100,200]
#
# @param coordinates [Array] A pair of 2 integers that can be used to describe a point on the screen
# @param offset_x    [Integer] How much to the left or right of the point you identified you want to actually touch
# @param offset_y    [Integer] How much to the top or bottom of the point you identified you want to actually touch
# @return            [Boolean] if touchAction is successful, true: false if errors
def touch_point(coordinates, offset_x = 0, offset_y = 0)
  x = coordinates[0] + offset_x
  y = coordinates[1] + offset_y

  action = Appium::TouchAction.new
  action.press(x: x, y: y).wait(10).release
  action.perform
  true
rescue StandardError
  false # touch_point didn't happen
end

Or something - this has worked for me.