Hi,
Have a product that we automated with Appium on a real device using iOS10, xCode8 and Appium .NET web driver. Our code is written in C# talking to the Appium Server on a Mac, with the iPhone plugged in
Background:
When we were using Appium 1.5.3 with iOS 9.5.3 and xCode7 everything worked and we have approx. 35 test cases written.
Then the switch to iOS 10, xCode8, XCUI framework, etc. We are using Appium 1.6.3. I have a number of observations. Lets start with …
It appears appium and the webdriver app installed on the iPhone quit talking if I ask it to do a query driver.FindElementBy… and the page changes content. For example on device1 I initiate an action. On device2 I am expecting to see a notification. If I programmatically add a bunch of delay and wait until I know the notification is there for sure. then do the driver.Find… step it generally works. If … I set the command timeout to 45 seconds on device2, then initiate the action on device1, start looking for the notification on device2, it generally fails and hangs the system. I need to restart the webdriver/appium to get running again.
Note back on 1.5.3 and iOS 9.3.5 this worked fine. I had no troubles telling the driver to find an element that was not there, but was expected with the next 10-20 seconds. It would loop looking and looking until it found it and return the element. Or return an error if not found by the timeout.
But with the new Appium this appears to me to not work so well. For this example I even went to the point of doing driver.PageSource and having the page source uploaded to C# code, then parsing it all myself. Here too if I do drive.PageSource while the content of the page is static it seems ok. If I do driver.PageSource and the notification comes in while fetching the source, the webdriver never returns anything to Appium and ultimately the C# side gets a json timeout.
– Too add, we have added some large delays into the test cases to limp along where possible. But there are some timing issues that are out of our control as testers. I cannot work around all of them. Then each time one occurs it not only fails that test case, but all remaining test cases fail. Then we have to reboot and reset everything to start again.