TestProject Forum
Powered by leading experts in the test automation community

Same XPath does not work in all iOS

I have recorded test cases in iOS 13.3 but some XPath created by recorder does not work in iOS 13.5.
For example:

I have UIPopOverController which has UITbleview and I have a test where I am selecting row in UITableView.
Recorder is generating following XPath

By.xpath("//XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther[3]/XCUIElementTypeOther[2]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeTable[1]/XCUIElementTypeCell[1]/XCUIElementTypeStaticText[1]");

But I need to change to

By.xpath("//XCUIElementTypeStaticText[@label = ‘Secondary and below’]");

to make it work in iOS 13.5 but it work without change in iOS 13.3.

It’s difficult to change all those instances across my test cases. I need to know what should be done to fix this, I don’t want to modify my script.

Hello @be_ashketchup
Do you have another iOS device who is on a prior version you can try to execute the test on?
Or use our Integration with BrowserStack/SauceLabs to run on a prior version iOS device to see if it does pass.

Let me know of your findings please.

Best Regards, Ran.

Earlier i was running script on iOS 13.2 which was recorded on iOS 13.3, but it was not working which is why i updated my iOS to 13.5 and still not able to run the scripts.

Also, as you mentioned run on iOS emulator how to do that ?
I don’t wanna use BrowserStack / SauceLabs as of now.

Kindly help me understand why xPath is not working…

It will be helpful if someone knows how to resolve this issue. Has anyone face this issue ?

Hello @be_ashketchup.

Can you please contact us in the support chat and we will troubleshoot this issue?

XPath is not native for iOS and XCUITest, they are very slow, fragile and prone to errors.
Appium and TestProject use it as last resort.

It would work much better and consistently if you add accessibility IDs to your app as shown below.
Recorder can pickup these IDs and use them for automation.

Please extract the DOM when using the recorder on both of the devices.
You can do it using the “arrow down” icon from the element explorer widget as shown below.
We will compare the two DOMs to understand if indeed the layout is different and why.

Screen Shot 2020-06-26 at 10.24.36