Hi team, I’m having an issue finding a textfield element (with placeholder text) on Appium 1.20.x on iOS13+. This was working fine on Appium 1.19.x.
The UI test we’re doing is pretty straightforward:
1. Tap on a textfield element, identified by the string value of the placeholder
2. Enter some value into the textfield
Our dev environment:
* Appium 1.20.x
* Appium-Python-Client 0.48
* behave 1.2.6
* python 3.8.1
* selenium 3.141
iOS currently does not have an accessibility identifier assigned to the textfield, since we’ve been able to find the placeholder text of the textfield without issue on 1.19.x. I’ve provided a screenshot of the iOS screen with the textfield element.
Sample code of what we’re trying to do:
from appium.webdriver.common.mobileby import MobileBy
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Capabilities for local run
capabilities = { ... }
driver = webdriver.Remote("http://localhost:4723/wd/hub", capabilities)
# Wait for element for up to 5 seconds
wait = WebDriverWait(driver, 5)
# Find text field with a placeholder text "Enter our email address"
locator = (MobileBy.ACCESSIBILITY_ID, 'Enter your email address')
# Times out here on Appium 1.20.x but works fine on 1.19.x
element = wait.until(EC.presence_of_element_located(locator))
Did Appium 1.20.x change the way elements are found on screen? If so, what do I need to change/add in order to find the element again using the previous pattern with MobileBy.ACCESSIBILITY_ID?
Exception from Appium logs.
[debug] [W3C (61fb666a)] Calling AppiumDriver.findElement() with args: ["accessibility id","Enter your email address","61fb666a-36ca-4063-925c-7c2aef115175"]
[debug] [XCUITest] Executing command 'findElement'
[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, name, class name, -ios predicate string, -ios class chain, accessibility id, css selector
[debug] [BaseDriver] Waiting up to 0 ms for condition
[debug] [WD Proxy] Matched '/element' to command name 'findElement'
[debug] [WD Proxy] Proxying [POST /element] to [POST http://127.0.0.1:8100/session/24E69F6E-78DB-4272-B87E-C70A89DDFBCC/element] with body: {"using":"accessibility id","value":"Enter your email address"}
[WD Proxy] Got response with status 404: {"value":{"error":"no such element","message":"unable to find an element using 'accessibility id', value 'Enter your email address'","traceback":"(\n\t0 WebDriverAgentLib 0x0000000105f0c74a FBNoSuchElementErrorResponseForRequest + 298\n\t1 WebDriverAgentLib 0x0000000105f0c509 +[FBFindElementCommands handleFindElement:] + 409\n\t2 WebDriverAgentLib 0x0000000105ec7ab6 -[FBRoute_TargetAction mountRequest:intoResponse:] + 182\n\t3 WebDriverAgentLib 0x0000000105ea1938 __37-[FBWebServer registerRouteHandlers:]_block_invoke + 536\n\t4 WebDriverAgentLib 0x0000000105eee8eb -[RoutingHTTPServer handleRoute:withRequest:response:] + 219\n\t5 WebDriverAgentLib 0x0000000105eef7e3 __72-[RoutingHTTPServer routeMethod:withPath:parameters:request:connection:]_block_invoke + 83\n\t6 libdispatch.dylib 0x00007fff519798cb _dispatch_client_callout + 8\n\t7 libdispatch.dylib ...
[debug] [W3C] Matched W3C error code 'no such element' to NoSuchElementError
[debug] [W3C (61fb666a)] Encountered internal error running command: NoSuchElementError: An element could not be located on the page using the given search parameters.
[debug] [W3C (61fb666a)] at XCUITestDriver.doNativeFind (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/commands/find.js:130:11)
[debug] [W3C (61fb666a)] at process._tickCallback (internal/process/next_tick.js:68:7)
[HTTP] <-- POST /wd/hub/session/61fb666a-36ca-4063-925c-7c2aef115175/element 404 33 ms - 446