为啥 XCUITest 对 iOS 应用程序运行太慢?
Posted
技术标签:
【中文标题】为啥 XCUITest 对 iOS 应用程序运行太慢?【英文标题】:Why XCUITest is working too much slow for iOS app?为什么 XCUITest 对 iOS 应用程序运行太慢? 【发布时间】:2019-10-18 06:07:40 【问题描述】:我想在 ios 原生应用中获取动态元素的值。我使用XCUITest
来获取元素的路径。路径工作正常,但获取/打印值大约需要 1 分钟。我没有使用任何等待。
我的代码是:
String El1="//XCUIElementTypeApplication[@name='appName']/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[5]/XCUIElementTypeStaticText";
System.out.println("Value: "+driver.findElementByXPath(El1).getText());
【问题讨论】:
【参考方案1】:XCTest 是一个非常快速的框架。
尽管 Xpath 非常常见且灵活,但它并不是查找 iOS 元素的最佳选择。
您应缩短对该元素的查询并使用findElementByIosNsPredicate
IOSElement settingsCell = driver.findElementByIosNsPredicate("type == 'XCUIElementTypeCell' AND name == 'Settings'");
您可能会发现这篇文章很有帮助
http://appium.io/docs/en/writing-running-appium/ios/ios-predicate/
【讨论】:
【参考方案2】:原因是你的 xpath 字符串很长。这往往会减慢 Appium 的速度,因为它需要遍历您的案例中的长路径。放置绝对 xpath 也是非常脆弱和糟糕的主意。 有几种获取元素的方法
类名 身份证 名称 xpath 可访问性 ID ios 谓词字符串 ios类链
请参阅元素的检查器(例如 Appium 检查器)。 如果有可访问的 id ,代码应该是
WebElement el = driver.findElement(MobileBy.AccessibilityID("foo"));
班级名称 类名应该是第二个。这特别有效,特别是如果只有 1 个唯一的类名 - 比如表单中只有 1 个按钮
List<MobileElement> elementsTwo = (List<MobileElement>) driver.findElementsByClassName("XCUIElementTypeButton");
iOS 特定的定位器策略 你可以试试 iOSClassChain。那是下一个有效的选择器。示例
String selector = "**/XCUIElementTypeCell[`name BEGINSWITH "C"`]/XCUIElementTypeButton[10]";<br>
driver.findElement(MobileBy.iOSClassChain(selector));
或者您可以尝试使用谓词选择器。
driver.findElementsByIosNsPredicate("isWDVisible == 1");
最后,如果所有这些选项都用完了,你应该使用 xpath 作为最后的手段。避免使用绝对 xpath 并使用相对 xpath。
绝对 xpath
String El1="//XCUIElementTypeApplication[@name='appName']/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[5]/XCUIElementTypeStaticText";
相对 xpath
String El1 = “//XCUIElementTypeTable[name=‘Customer’]/XCUIElementTypeCell[5]/XCUIElementTypeStaticText”
【讨论】:
以上是关于为啥 XCUITest 对 iOS 应用程序运行太慢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 XCUITest 在 Xcode 11.4.1 中捕获的流失败
XCUITest - 如何在应用程序运行时禁用 Wi Fi?
运行 XCUITest 自动化后获取应用程序的控制台/文件日志和视频