[Python, Real Device, iOS] WebElement.click() on webelement inconsistently working with different pages

Hi,

I’ve done some extensive research to see if this has been resolved somewhere, but I couldn’t seem to find it. There were some similar problems and solutions which I have tried to no avail.

What I am experiencing is the webelement.click() method working on some web pages, but not others. It is returning the same logs on Appium, but the click is not actually executing.

I have outlined my setup, my code, the logs, and all the things I have tried. Including in the things I’ve tried is switching contexts to NATIVE_APP before clicking. It doesn’t work, but I also have problems switching back to webview if anyone has a solution for that.
Sorry for the long post, I’ll be explaining everything I have tried to do.

Appium Version 1.4.13
OSX Yosemite 10.10.4
iPhone 5s, 8.1

What I am doing:
Start ios-webkit-debug-proxy -d -c XXXX:27753
Launch Appium with mobile safari checked and correct id/device/etc.
Code:

from appium import webdriver
desired_caps = {}
desired_caps[‘platformName’] = ‘iOS’
desired_caps[‘platformVersion’] = ‘8.1’
desired_caps[‘deviceName’] = ‘iPhone’
desired_caps[‘udid’] = ‘XXXX’
desired_caps[‘safariIgnoreFraudWarning’] = True
desired_caps[‘browserName’] = ‘Safari’
desired_caps[‘nativeWebTap’]= True

driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub’, desired_caps)
driver.get(‘https://www.westjet.com/mobile/’)
driver.find_element_by_id(‘a-flight-btn’).click() #This works, brings us to the next page
driver.find_element_by_id(‘a-one-way’).click() #This doesnt work, appium executes the click but no click is done on the device.

LOG:

Launching Appium with command: '/Applications/Appium.app/Contents/Resources/node/bin/node' lib/server/main.js --command-timeout "7200" --debug-log-spacing --platform-version "8.1" --platform-name "iOS" --safari --browser-name "Safari" --udid "4c0aca67be2f1be8abc58da679d08d02cdc367c0" --show-ios-log --default-device
info: Welcome to Appium v1.4.13 (REV c75d8adcb66a75818a542fe1891a34260c21f76a)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: [debug] Non-default server args: {"udid":"4c0aca67be2f1be8abc58da679d08d02cdc367c0","safari":true,"platformName":"iOS","platformVersion":"8.1","browserName":"Safari","defaultDevice":true,"showIOSLog":true,"defaultCommandTimeout":7200,"debugLogSpacing":true}
info: Console LogLevel: debug
info: --> POST /wd/hub/session {"desiredCapabilities":{"nativeWebTap":true,"deviceName":"iPhone","udid":"4c0aca67be2f1be8abc58da679d08d02cdc367c0","browserName":"Safari","safariIgnoreFraudWarning":true,"platformVersion":"8.1","platformName":"iOS"}}
info: Client User-Agent string: Python-urllib/2.7
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: ****        NEW SESSION           ***
info: ****        NEW SESSION           ***
info: ****        NEW SESSION           ***
info: ****        NEW SESSION           ***
info: ****        NEW SESSION           ***
info: ****        NEW SESSION           ***
info: ****        NEW SESSION           ***
info: ****        NEW SESSION           ***
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: *************************************
info: [debug] Configuring Safari session
info: [debug] Using local .zip from command line: /Applications/Appium.app/Contents/Resources/node_modules/appium/build/SafariLauncher/SafariLauncher.zip
info: [debug] Copying local zip to tmp dir
info: [debug] /Applications/Appium.app/Contents/Resources/node_modules/appium/build/SafariLauncher/SafariLauncher.zip copied to /var/folders/1v/1k9mjwhd1jgg4wc_y69gpq1c7c696k/T/116019-59256-dtp3up/appium-app.zip
info: [debug] Unzipping /var/folders/1v/1k9mjwhd1jgg4wc_y69gpq1c7c696k/T/116019-59256-dtp3up/appium-app.zip
info: [debug] Testing zip archive: /var/folders/1v/1k9mjwhd1jgg4wc_y69gpq1c7c696k/T/116019-59256-dtp3up/appium-app.zip
info: [debug] Zip archive tested clean
info: [debug] Unzip successful
info: [debug] Using locally extracted app: /var/folders/1v/1k9mjwhd1jgg4wc_y69gpq1c7c696k/T/116019-59256-dtp3up/SafariLauncher.app
info: [debug] Creating new appium session 832169bf-e465-4b1d-9b0d-d794135734f5
info: [debug] Removing any remaining instruments sockets
info: [debug] Cleaned up instruments socket /tmp/instruments_sock
info: [debug] Auto-detecting iOS udid...
info: [debug] Not auto-detecting udid, running on sim
info: [debug] Could not parse plist file (as binary) at /var/folders/1v/1k9mjwhd1jgg4wc_y69gpq1c7c696k/T/116019-59256-dtp3up/SafariLauncher.app/en.lproj/Localizable.strings
info: Will try to parse the plist file as XML
info: [debug] Could not parse plist file (as XML) at /var/folders/1v/1k9mjwhd1jgg4wc_y69gpq1c7c696k/T/116019-59256-dtp3up/SafariLauncher.app/en.lproj/Localizable.strings
warn: Could not parse app Localizable.strings assuming it doesn't exist
info: [debug] Getting bundle ID from app
info: [debug] Parsed app Info.plist (as binary)
info: [debug] Creating instruments
info: [debug] Preparing uiauto bootstrap
info: [debug] Dynamic bootstrap dir: /Users/sho/Library/Application Support/appium/bootstrap
info: [debug] Dynamic env: {"nodePath":"/Applications/Appium.app/Contents/Resources/node/bin/node","commandProxyClientPath":"/Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/bin/command-proxy-client.js","instrumentsSock":"/tmp/instruments_sock","interKeyDelay":null,"justLoopInfinitely":false,"autoAcceptAlerts":false,"autoDismissAlerts":false,"sendKeyStrategy":"grouped"}
info: [debug] Dynamic bootstrap code: // This file is automatically generated. Do not manually modify!
...
info: [debug] Dynamic bootstrap path: /Users/sho/Library/Application Support/appium/bootstrap/bootstrap-5923cadea0343e3f.js
info: [debug] Reusing dynamic bootstrap: /Users/sho/Library/Application Support/appium/bootstrap/bootstrap-5923cadea0343e3f.js
info: [debug] Attempting iOS device log capture via libimobiledevice idevicesyslog
info: [debug] Creating iDevice object with udid 4c0aca67be2f1be8abc58da679d08d02cdc367c0
info: [debug] Starting command proxy.
info: [debug] Instruments socket server started at /tmp/instruments_sock
info: [debug] Starting instruments
info: [debug] Instruments is at: /Applications/Xcode.app/Contents/Developer/usr/bin/instruments
info: Launching instruments
info: [debug] Attempting to run app on real device with UDID 4c0aca67be2f1be8abc58da679d08d02cdc367c0
info: [debug] Spawning instruments with command: /Applications/Xcode.app/Contents/Developer/usr/bin/instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate -D /tmp/appium-instruments/instrumentscli0.trace -w 4c0aca67be2f1be8abc58da679d08d02cdc367c0 com.westjet.safarilauncher -e UIASCRIPT "/Users/sho/Library/Application Support/appium/bootstrap/bootstrap-5923cadea0343e3f.js" -e UIARESULTSPATH /tmp/appium-instruments
info: [debug] And extra without-delay env: {}
info: [debug] And launch timeouts (in ms): {"global":90000}
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:23 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:23 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:23 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:23 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:24 iPhone backboardd[51] <Notice>: ALS: SetDisplayFactor: factor=0.0500
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:24 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:24 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:24 iPhone syslog_relay[946] <Notice>: syslog_relay found the ASL prompt. Starting...
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:24 iPhone locationd[55] <Notice>: Gesture EnabledForTopCLient: 0, EnabledInDaemonSettings: 0
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:27 iPhone kernel[0] <Notice>: 092988.598710 wlan0.A[43597] AppleBCMWLANConfigManager::configureRoamingProfile(): Received new roaming profile 3 (was 3, flag=0x0)
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:27 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:25 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:27 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:25 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:27 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:25 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:25 iPhone mobile_installation_proxy[170] <Warning>: LaunchServices: Please include the kCFBundleIdentifierKey in the options dictionary when installing an app.
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:25 iPhone mobile_installation_proxy[170] <Warning>: LaunchServices: installing app with unknown bundleID
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:25 iPhone installd[40] <Notice>: 0x10050c000 -[MIClientConnection _doBackgroundInstallationForPath:withOptions:completion:]: Install of "/var/mobile/Media/PublicStaging/SafariLauncher.app" type Developer requested by mobile_installation_proxy (pid 170)
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:25 iPhone installd[40] <Notice>: 0x10050c000 -[MIInstaller performInstallationWithError:]: Installing <MIInstallableBundle ID=com.westjet.safarilauncher; Version=2.0, ShortVersion=2.0>
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone profiled[119] <Notice>: (Note ) MC: Provisioning profiles changed
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone installd[40] <Error>:  SecTrustEvaluate  [leaf CriticalExtensions IssuerCommonName]
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone SpringBoard[48] <Warning>: Killing com.westjet.safarilauncher for termination assertion
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone pkd[104] <Warning>: releasing plug-in hold EEFF9119-5F26-4730-945F-9CBD2C6894C7 for dead client pid 48
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone installd[40] <Notice>: 0x10050c000 -[MIInstallableBundle _refreshUUIDForContainer:withError:]: Data container for com.westjet.safarilauncher is now at /private/var/mobile/Containers/Data/Application/EB3F66F6-EB7C-4F65-AF4A-46C6A1E6639C
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone installd[40] <Notice>: 0x10050c000 -[MIContainer makeContainerLiveReplacingContainer:withError:]: Made container live for com.westjet.safarilauncher at /private/var/mobile/Containers/Bundle/Application/39FCB9DB-4C0E-42C9-A17B-FC97028E9F31
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone installd[40] <Notice>: 0x10050c000 -[MIInstaller performInstallationWithError:]: Staging: 0.04s; Waiting: 0.00s; Installation: 0.35s; Overall: 0.39s
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone lsd[73] <Warning>: LaunchServices: Updating identifier store
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone syncdefaultsd[1152] <Notice>: (Note ) SYDAlwaysOnAccount: no account (null)
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone syncdefaultsd[1152] <Notice>: (Note ) SYDAccount: no account
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone syncdefaultsd[1152] <Notice>: (Note ) SYDPIMAccount: no account (null)
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:27 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:27 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone SpringBoard[48] <Error>: libMobileGestalt MobileGestalt.c:841: any-telephony is static and will never generate a notification
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone SpringBoard[48] <Error>: libMobileGestalt MobileGestalt.c:841: magnetometer is static and will never generate a notification
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone SpringBoard[48] <Error>: libMobileGestalt MobileGestalt.c:841: still-camera is static and will never generate a notification
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone SpringBoard[48] <Error>: libMobileGestalt MobileGestalt.c:841: stand-alone-contacts is static and will never generate a notification
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone SpringBoard[48] <Error>: libMobileGestalt MobileGestalt.c:841: nike-ipod is static and will never generate a notification
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:26 iPhone SpringBoard[48] <Warning>: Installed apps did change.
info: [IOS_SYSLOG_ROW ] Added: {(
info: [IOS_SYSLOG_ROW ] )}
info: [IOS_SYSLOG_ROW ] Removed: {(
info: [IOS_SYSLOG_ROW ] )}
info: [IOS_SYSLOG_ROW ] Modified: {(
info: [IOS_SYSLOG_ROW ] "com.westjet.safarilauncher"
info: [IOS_SYSLOG_ROW ] )}
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [debug] [INST STDERR] 2016-01-19 15:57:24.663 instruments[59285:265680] WebKit Threading Violation - initial use of WebKit from a secondary thread.
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone DTMobileIS[951] <Warning>: Could not create service named com.apple.instruments.server.services.assets
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone SpringBoard[48] <Warning>: Entitlement com.apple.multitasking.termination required to kill applications.
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone backboardd[51] <Notice>: ALS: SetDisplayFactor: factor=1.0000
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone kernel[0] <Notice>: xpcproxy[1154] Container: /private/var/mobile/Containers/Data/Application/EB3F66F6-EB7C-4F65-AF4A-46C6A1E6639C (sandbox)
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone SpringBoard[48] <Warning>: LICreateIconForImage passed NULL CGImageRef image
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:28 iPhone DTMobileIS[951] <Error>: kernel symbolicator unable to open /mach.release.s5l8960x
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone lockdownd[62] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone notification_proxy[132] <Error>: 0x1001b8000 -[MNPLockdownConnection receiveMessage]: lockdown_receive_message error!
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone notification_proxy[132] <Error>: 0x100594000 -[MNPLockdownConnection receiveMessage]: lockdown_receive_message error!
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone SafariLauncher[1154] <Error>: assertion failed: 12B411: libxpc.dylib + 51947 [DBA1E85F-5C4C-3026-9B98-A82D2E332ED6]: 0x7d
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone Unknown[1154] <Error>:
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone SafariLauncher[1154] <Warning>: App setting not found. Initializing app settings to default values.
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone SafariLauncher[1154] <Warning>:   height - 568.000000 : width - 320.000000
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:29 iPhone locationd[55] <Notice>: Gesture EnabledForTopCLient: 0, EnabledInDaemonSettings: 0
info: Instruments is ready to receive commands
info: [debug] Instruments launched. Starting poll loop for new commands.
info: [debug] Setting bootstrap config keys/values
info: [debug] Pushing command to appium work queue: "target = $.target();\nau = $;\n$.isVerbose = true;\n"
info: [debug] Socket data received (2 bytes)
info: [debug] Socket data being routed.
info: [debug] Sending command to instruments: target = $.target();
au = $;
$.isVerbose = true;
info: [debug] [INST] 2016-01-19 22:57:31 +0000 Debug: evaluation finished
info: [debug] [INST] 2016-01-19 22:57:31 +0000 Debug: responding with:
info: [debug] [INST] 2016-01-19 22:57:31 +0000 Debug: Running system command #1: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":true}...
info: [debug] Socket data received (27 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":true}
info: [debug] Not setting initial orientation because we're on SafariLauncher
info: [debug] Waiting for app source to contain elements
info: [debug] Pushing command to appium work queue: "au.mainApp().getTreeForXML()"
info: [debug] Sending command to instruments: au.mainApp().getTreeForXML()
info: [debug] [INST] 2016-01-19 22:57:32 +0000 Debug: Got new command 1 from instruments: au.mainApp().getTreeForXML()
info: [debug] [INST] 2016-01-19 22:57:32 +0000 Debug: evaluating au.mainApp().getTreeForXML()
info: [debug] [INST] 2016-01-19 22:57:32 +0000 Debug: evaluation finished
info: [debug] [INST] 2016-01-19 22:57:32 +0000 Debug: responding with:bled":true,"valid":true,"visible":true,"hint":null,"path":"/0/0","x":0,"y":0,"width":320,"height":568},">":[{"UIAStaticText":{"@":{"name":"Safari Launcher","label":"Safari Launcher","value":"Safari Launcher","dom":null,"enabled":true,"valid":true,"visible":true,"hint":null,"path":"/0/0/0","x":80,"y":10,"width":320,"height":50},">":[]}},{"UIAButton":{"@":{"name":"launch safari","label":"launch safari","value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":null,"path":"/0/0/1","x":60,"y":254,"width":200,"height":60},">":[]}},{"UIAStaticText":{"@":{"name":"   url: ***THIS PART IS OMITTED BECAUSE I AM A NEW USER WITH LINK LIMITS***,">":[]}}]}},{"UIAWindow":{"@":{"name":null,"label":null,"value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":null,"path":"/0/1","x":0,"y":0,"width":320,"height":568},">":[{"UIAStatusBar":{"@":{"name":null,"label":null,"value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":null,"path":"/0/1/0","x":0,"y":0,"width":320,"height":20},">":[{"UIAElement":{"@":{"name":"No Service","label":"No Service","value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":"Swipe down with three fingers to reveal the notification center., Swipe up with three fingers to reveal the control center, Double-tap to scroll to top","path":"/0/1/0/0","x":6,"y":0,"width":61,"height":20},">":[]}},{"UIAElement":{"@":{"name":"3 of 3 Wi-Fi bars","label":"3 of 3 Wi-Fi bars","value":"WJ Hotspot","dom":null,"enabled":true,"valid":true,"visible":true,"hint":"Swipe down with three fingers to reveal the notification center., Swipe up with three fingers to reveal the control center, Double-tap to scroll to top","path":"/0/1/0/1","x":72,"y":0,"width":13,"height":20},">":[]}},{"UIAElement":{"@":{"name":"3:57 PM","label":"3:57 PM","value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":"Swipe down with three fingers to reveal the notification center., Swipe up with three fingers to reveal the control center, Double-tap to scroll to top","path":"/0/1/0/2","x":137,"y":0,"width":47,"height":20},">":[]}},{"UIAElement":{"@":{"name":"Bluetooth on","label":"Bluetooth on","value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":"Swipe down with three fingers to reveal the notification center., Swipe up with three fingers to reveal the control center, Double-tap to scroll to top","path":"/0/1/0/3","x":234,"y":0,"width":8,"height":20},">":[]}},{"UIAElement":{"@":{"name":"100% battery power, On AC Power","label":"100% battery power, On AC Power","value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":"Swipe down with three fingers to reveal the notification center., Swipe up with three fingers to reveal the control center, Double-tap to scroll to top","path":"/0/1/0/4","x":248,"y":0,"width":67,"height":20},">":[]}}]}}]}}]}}}
info: [debug] [INST] 2016-01-19 22:57:32 +0000 Debug: Running system command #2: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":{"UIAApplication":{"@":{"name":"SafariLauncher","label":"SafariLauncher","value":...
info: [debug] Socket data received (3323 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":{"UIAApplication":{"@":{"name":"SafariLauncher","label":"SafariLauncher","value":null,"dom":null,"enabled":true,"valid":true,"visible":true,"hint":null,"path":"/0","x":0,"y":20,"width":320,"height":548},">":[{"UIAWindow":{"@":{"name":null,"label":null,"value":null,"dom":null,"ena
info: [debug] On Safari Launcher. Tapping button to launch Safari
info: [debug] Waiting up to 0ms for condition
info: [debug] Pushing command to appium work queue: "au.getElementByAccessibilityId('launch safari')"
info: [debug] Sending command to instruments: au.getElementByAccessibilityId('launch safari')
info: [debug] [INST] 2016-01-19 22:57:33 +0000 Debug: Got new command 2 from instruments: au.getElementByAccessibilityId('launch safari')
info: [debug] [INST] 2016-01-19 22:57:33 +0000 Debug: evaluating au.getElementByAccessibilityId('launch safari')
info: [debug] [INST] 2016-01-19 22:57:33 +0000 Debug: evaluation finished
info: [debug] [INST] 2016-01-19 22:57:33 +0000 Debug: Lookup returned [object UIAButton] with the name "launch safari" (id: 0).
info: [debug] [INST] 2016-01-19 22:57:33 +0000 Debug: responding with:
info: [debug] [INST] 2016-01-19 22:57:33 +0000 Debug: Running system command #3: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":{"ELEMENT":"0"}}...
info: [debug] Socket data received (38 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":{"ELEMENT":"0"}}
info: [debug] Pushing command to appium work queue: "au.tapById('0')"
info: [debug] Sending command to instruments: au.tapById('0')
info: [debug] [INST] 2016-01-19 22:57:34 +0000 Debug: Got new command 3 from instruments: au.tapById('0')
info: [debug] [INST] 2016-01-19 22:57:34 +0000 Debug: evaluating au.tapById('0')
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:34 iPhone MobileGestaltHelper[76] <Error>: libMobileGestalt MobileGestalt.c:273: server_access_check denied access to question UniqueDeviceID for pid 1155
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:34 iPhone ScriptAgent[1155] <Error>: libMobileGestalt MobileGestaltSupport.m:170: pid 1155 (ScriptAgent) does not have sandbox access for re6Zb+zwFKJNlkQTUeT+/w and IS NOT appropriately entitled
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:34 iPhone ScriptAgent[1155] <Error>: libMobileGestalt MobileGestalt.c:534: no access to UniqueDeviceID (see <rdar://problem/11744455>)
info: [debug] [INST] 2016-01-19 22:57:34 +0000 Debug: UIAButton.tap()
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:35 iPhone SafariLauncher[1154] <Warning>: Launching URL - http://www.apple.com
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:35 iPhone locationd[55] <Notice>: Gesture EnabledForTopCLient: 0, EnabledInDaemonSettings: 0
info: [debug] [INST] 2016-01-19 22:57:35 +0000 Debug: evaluation finished
info: [debug] [INST] 2016-01-19 22:57:35 +0000 Debug: responding with:
info: [debug] [INST] 2016-01-19 22:57:35 +0000 Debug: Running system command #4: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":""}...
info: [debug] Socket data received (25 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":""}
info: [debug] Clicked button, safari should be launching.
info: [debug] Waiting for 6000 ms before navigating to view.
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:35 iPhone sharingd[54] <Notice>: 15:57:35.927 : Stopping Handoff advertising
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:37 iPhone syncdefaultsd[1152] <Notice>: (Note ) marked "com.me.keyvalueservice" topic as "ignored" on (null)
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:38 iPhone assistant_service[999] <Warning>: the local store doesn't allow tasks and we have no default calendar :(
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:39 iPhone kernel[0] <Notice>: 093003.652963 wlan0.A[43598] AppleBCMWLANConfigManager::configureRoamingProfile(): Received new roaming profile 3 (was 3, flag=0x1)
info: [debug] Navigating to most recently opened webview
info: [debug] [REMOTE] Getting WebKitRemoteDebugger pageArray
info: [debug] Picking webview WEBVIEW_1
info: [debug] Attempting to set context to 'WEBVIEW_1'
info: [debug] [REMOTE] Debugger web socket connected to url [ws://localhost:27753/devtools/page/1]
info: [debug] [REMOTE] Unregistering from page readiness notifications
info: [debug] Waiting for 6000 ms before navigating to view.
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:44 iPhone sharingd[54] <Notice>: 15:57:44.432 : Stopping Handoff advertising
info: [debug] Navigating to most recently opened webview
info: [debug] [REMOTE] Getting WebKitRemoteDebugger pageArray
info: [debug] Picking webview WEBVIEW_1
info: [debug] Attempting to set context to 'WEBVIEW_1'
info: [debug] [REMOTE] Disconnecting from remote debugger
info: [debug] [REMOTE] Debugger web socket connected to url [ws://localhost:27753/devtools/page/1]
info: [debug] [REMOTE] Unregistering from page readiness notifications
info: [debug] Device launched! Ready for commands
info: [debug] Setting command timeout to the default of 7200 secs
info: [debug] Appium session started with sessionId 832169bf-e465-4b1d-9b0d-d794135734f5
info: <-- POST /wd/hub/session 303 23938.042 ms - 74 
info: --> GET /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5 {}
info: [debug] Responding to client with success: {"status":0,"value":{"webStorageEnabled":false,"locationContextEnabled":false,"browserName":"Safari","platform":"MAC","javascriptEnabled":true,"databaseEnabled":false,"takesScreenshot":true,"networkConnectionEnabled":false,"warnings":{},"desired":{"nativeWebTap":true,"deviceName":"iPhone","udid":"4c0aca67be2f1be8abc58da679d08d02cdc367c0","browserName":"Safari","safariIgnoreFraudWarning":true,"platformVersion":"8.1","platformName":"iOS"},"nativeWebTap":true,"deviceName":"iPhone","udid":"4c0aca67be2f1be8abc58da679d08d02cdc367c0","safariIgnoreFraudWarning":true,"platformVersion":"8.1","platformName":"iOS","safari":true},"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: <-- GET /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5 200 4.086 ms - 676 {"status":0,"value":{"webStorageEnabled":false,"locationContextEnabled":false,"browserName":"Safari","platform":"MAC","javascriptEnabled":true,"databaseEnabled":false,"takesScreenshot":true,"networkConnectionEnabled":false,"warnings":{},"desired":{"nativeWebTap":true,"deviceName":"iPhone","udid":"4c0aca67be2f1be8abc58da679d08d02cdc367c0","browserName":"Safari","safariIgnoreFraudWarning":true,"platformVersion":"8.1","platformName":"iOS"},"nativeWebTap":true,"deviceName":"iPhone","udid":"4c0aca67be2f1be8abc58da679d08d02cdc367c0","safariIgnoreFraudWarning":true,"platformVersion":"8.1","platformName":"iOS","safari":true},"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: --> POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/url {"url":"https://www.westjet.com/mobile/","sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: [debug] [REMOTE] Navigating to new URL: https://www.westjet.com/mobile/
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Page.navigate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"url":"https://www.westjet.com/mobile/"},"id":1}...]
info: [debug] [REMOTE] Debugger web socket received data: {"result":{},"id":1}
info: [debug] [REMOTE] Debugger got a message for 'Page.navigate' and have no handler, doing nothing.
info: [debug] [REMOTE] Waiting for frame navigated...
info: [debug] [REMOTE] frame navigated timeout triggered
info: [debug] [REMOTE] Frame navigated, calling cbs
info: [debug] [REMOTE] frame navigated in 0.501 sec.
info: [debug] [REMOTE] Waiting for dom...
info: [debug] [REMOTE] Page loaded, verifying whether ready through readyState
info: [debug] [REMOTE] Checking document readyState
info: [debug] [REMOTE] Sending javascript command
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Runtime.evaluate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"expression":"(function (){return document.readyState;})()","ret...]
info: [debug] [REMOTE] Debugger web socket received data: {"result":{"result":{"type":"string","value":"complete"},"wasThrown":false},"id":2}
info: [debug] [REMOTE] readyState was complete
info: [debug] [REMOTE] Page is ready, calling onload cbs
info: [debug] Responding to client with success: {"status":0,"value":"","sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: <-- POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/url 200 2036.964 ms - 74 {"status":0,"value":"","sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: [IOS_SYSLOG_ROW ] Jan 19 15:57:52 iPhone sharingd[54] <Notice>: 15:57:52.935 : Stopping Handoff advertising
info: [IOS_SYSLOG_ROW ] Jan 19 15:58:01 iPhone sharingd[54] <Notice>: 15:58:01.437 : Stopping Handoff advertising
info: --> POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element {"using":"id","sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5","value":"a-flight-btn"}
info: [debug] Waiting up to 0ms for condition
info: [debug] [REMOTE] Executing 'find_element' atom in default context
info: [debug] [REMOTE] Sending javascript command
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Runtime.evaluate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"expression":"(function(){return function(){function h(a){return...]
info: [debug] [REMOTE] Debugger web socket received data: {"result":{"result":{"type":"string","value":"{\"status\":0,\"value\":{\"ELEMENT\":\":wdc:1453244283155\"}}"},"wasThrown":false},"id":3}
info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"5000"},"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: <-- POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element 200 61.540 ms - 90 {"status":0,"value":{"ELEMENT":"5000"},"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: --> POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element/5000/click {"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5","id":"5000"}
info: [debug] [REMOTE] Executing 'click' atom in default context
info: [debug] [REMOTE] Sending javascript command
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Runtime.evaluate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"expression":"(function(){return function(){function h(a){return...]
info: [debug] [REMOTE] Debugger web socket received data: {"result":{"result":{"type":"string","value":"{\"status\":0,\"value\":null}"},"wasThrown":false},"id":4}
info: [debug] Responding to client with success: {"status":0,"value":null,"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: <-- POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element/5000/click 200 137.650 ms - 76 {"status":0,"value":null,"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: [IOS_SYSLOG_ROW ] Jan 19 15:58:09 iPhone sharingd[54] <Notice>: 15:58:09.940 : Stopping Handoff advertising
info: --> POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element {"using":"id","sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5","value":"a-one-way"}
info: [debug] Waiting up to 0ms for condition
info: [debug] [REMOTE] Executing 'find_element' atom in default context
info: [debug] [REMOTE] Sending javascript command
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Runtime.evaluate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"expression":"(function(){return function(){function h(a){return...]
info: [debug] [REMOTE] Debugger web socket received data: {"result":{"result":{"type":"string","value":"{\"status\":0,\"value\":{\"ELEMENT\":\":wdc:1453244291059\"}}"},"wasThrown":false},"id":5}
info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"5001"},"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: <-- POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element 200 66.190 ms - 90 {"status":0,"value":{"ELEMENT":"5001"},"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: --> POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element/5001/click {"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5","id":"5001"}
info: [debug] [REMOTE] Executing 'click' atom in default context
info: [debug] [REMOTE] Sending javascript command
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Runtime.evaluate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"expression":"(function(){return function(){function h(a){return...]
info: [debug] [REMOTE] Debugger web socket received data: {"result":{"result":{"type":"string","value":"{\"status\":0,\"value\":null}"},"wasThrown":false},"id":6}
info: [debug] Responding to client with success: {"status":0,"value":null,"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}
info: <-- POST /wd/hub/session/832169bf-e465-4b1d-9b0d-d794135734f5/element/5001/click 200 101.283 ms - 76 {"status":0,"value":null,"sessionId":"832169bf-e465-4b1d-9b0d-d794135734f5"}

END LOG

Things I have Tried:
Using TouchActions(selenium.webdriver.common.touch_actions)
TouchActions(driver).tap(element).perform()
Result: Same as original

Using TouchAction(appium.webdriver.common.touch_action)
TouchAction(driver).tap(element).perform()
Result: Got a Not Yet Implemented Exception.

Using ActionChains(selenium.webdriver.common.action_chains)
ActionChains(driver).click(element).perform()
Result: It Actually works! The click is executed. What happens here is that it finds the coordinates of the element, and executes a tap in the coordinates. The problem here is that it cannot reach elements it cannot see ( such as a button where you have to scroll down). Another problem is that after sending keys to an element, it moves the screen because the keyboard pops up. This makes all subsequent click actions not work. I tried to always scroll to top before executing this, but to no avail. I am unable to scroll aswell.

Switching to native_app before clicking.
Result: Got Bug saying element is null.
relevant snippet from log:

info: [debug] [INST] 2016-01-19 23:12:45 +0000 Debug: responding with:
info: [debug] [INST] 2016-01-19 23:12:45 +0000 Debug: Running system command #5: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{“status”:13,“value”:“elementId 5000 is null and can’t be tapped.”}

Switching to native_app before using TouchAction
Result: Got a long error, from my understanding it cant get the size of the element, thus unable to calculate coordinates?
relevant snippet from log:

info: → POST /wd/hub/session/31531170-db1c-4d75-9617-e2ad9d46d0e4/touch/perform {“sessionId”:“31531170-db1c-4d75-9617-e2ad9d46d0e4”,“actions”:[{“action”:“tap”,“options”:{“y”:null,“x”:null,“count”:1,“element”:“5000”}}]}

info: [debug] Pushing command to appium work queue: “au.getElement(‘5000’).rect()”

info: [debug] Sending command to instruments: au.getElement(‘5000’).rect()

info: [debug] [INST] 2016-01-19 23:14:18 +0000 Debug: Got new command 5 from instruments: au.getElement(‘5000’).rect()

info: [debug] [INST] 2016-01-19 23:14:18 +0000 Debug: evaluating au.getElement(‘5000’).rect()

info: [debug] [INST] 2016-01-19 23:14:18 +0000 Error: TypeError: null is not an object (evaluating ‘au.getElement(‘5000’).rect’)

info: [debug] Socket data received (89 bytes)

info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {“status”:17,“value”:“null is not an object (evaluating ‘au.getElement(‘5000’).rect’)”}

error: uncaughtException: Cannot read property ‘width’ of undefined date=Tue Jan 19 2016 16:14:14 GMT-0700 (MST), pid=62183, uid=247669970, gid=489107244, cwd=/Applications/Appium.app/Contents/Resources/node_modules/appium, execPath=/Applications/Appium.app/Contents/Resources/node/bin/node, version=v0.12.7, argv=[/Applications/Appium.app/Contents/Resources/node/bin/node, /Applications/Appium.app/Contents/Resources/node_modules/appium/lib/server/main.js, --command-timeout, 7200, --debug-log-spacing, --platform-version, 8.1, --platform-name, iOS, --safari, --browser-name, Safari, --udid, 4c0aca67be2f1be8abc58da679d08d02cdc367c0, --show-ios-log, --default-device], rss=138584064, heapTotal=117418752, heapUsed=86291728, loadavg=[1.82421875, 1.88330078125, 1.91357421875], uptime=24689, trace=[column=31, file=/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/ios/ios-controller.js, function=, line=2172, method=null, native=false, column=43, file=/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/async/lib/async.js, function=next, line=798, method=null, native=false, column=16, file=/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/async/lib/async.js, function=null, line=32, method=null, native=false, column=9, file=/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/common.js, function=[object Object].exports.respond, line=28, method=exports.respond, native=false, column=18, file=/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/ios/ios.js, function=, line=1498, method=null, native=false, column=20, file=/Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/lib/command-proxy.js, function=getResultAndSendNext, line=146, method=null, native=false, column=7, file=/Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/lib/command-proxy.js, function=, line=88, method=null, native=false, column=20, file=events.js, function=Socket.emit, line=129, method=emit, native=false, column=16, file=_stream_readable.js, function=null, line=908, method=null, native=false, column=11, file=node.js, function=process._tickDomainCallback, line=381, method=_tickDomainCallback, native=false], stack=[TypeError: Cannot read property ‘width’ of undefined, at [object Object]. (/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/ios/ios-controller.js:2172:31), at next (/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/async/lib/async.js:798:43), at /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/async/lib/async.js:32:16, at [object Object].exports.respond (/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/common.js:28:9), at [object Object]. (/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/ios/ios.js:1498:18), at getResultAndSendNext (/Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/lib/command-proxy.js:146:20), at Socket. (/Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-uiauto/lib/command-proxy.js:88:7), at Socket.emit (events.js:129:20), at _stream_readable.js:908:16, at process._tickDomainCallback (node.js:381:11)]

Not exactly sure what’s going on, but it sounds like your scripts may be trying to access elements before they have been rendered. I’m going to suggest a short read on Explicit and Implicit waits, and that you try implementing Explicit waits in your code:

http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp

HTH.

Check whether element is present inside frame/window.

Sorry I should have said this, I do use explicit and implicit waits ( I’ve created many scripts using Selenium for desktop browsers), I just removed them in my example to remove clutter form the code. I’m currently just using the python terminal to run each line one at a time to see what works.

How would I do that? As far as I know, there is only one window when I do driver.get_window_handles, and there is only NATIVE_APP and WEBVIEW_1 views. I’ve done the methods element.is_displayed() and .is_enabled(), which both return True. I do not believe it’s within an iframe, is there a way to check?

Open Safari browser in system below Develop option you will find you Device name. inside that you can see the application click it to open DOM of the WebView.