我应该使用(最快)哪种方法来选择元素?

Posted

技术标签:

【中文标题】我应该使用(最快)哪种方法来选择元素?【英文标题】:Which method should I use (fastest) to select element? 【发布时间】:2015-02-16 17:53:17 【问题描述】:

嗯,有很多不同的方法可以在驱动程序之间选择元素。我想知道哪个速度最快,最适合原生应用(iosandroid)。

Appium Driver 类有:

findElementByAccessibilityId(String using)

Mobile 类有:

findElement(org.openqa.selenium.By by) //with ById/Xpath/Name/ClassName...

Android 和 iOS 驱动类有:

findElementByAndroidUIAutomator(String using)
findElementByIosUIAutomation(String using)

使用 RemoteWebDriver 类有:

findElementById();
findElementByXPath();
findElementById(); //css, className etc... -> WebElement which can be cast in mobileElement

所以我猜想使用UIAutomatorUIAutomation 更快,但Android 2.3+ 需要selendroid

你是怎么做的,为什么?你能为我提供一些 findElementByAndroidUIAutomator(String using)findElementByIosUIAutomation(String using)

的例子吗

我发现 XPath 选择器存在一些问题。从我的角度来看,使用findElement(By.name) 似乎很简单。

【问题讨论】:

【参考方案1】:

你是怎么做的,为什么?你能给我一些 findElementByAndroidUIAutomator(String using) 和 findElementByIosUIAutomation(String using) 的例子吗

AndroidDriver driver = new AndroidDriver();
WebElement element = driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"org.zwanoo.android.speedtest:id/upload\")");

其中“org.zwanoo.android.speedtest:id/upload”是包 id 和你的元素 id。这就是您可以在 UiAutomatorviewer 或 Appium Inspector 中找到它的方式。

【讨论】:

.findElementByAndroidUIAutomator 出现在 iOSDriver 和 AndroidDriver 上,这些类扩展了 AppiumDriver,因此:一种更新、更快的元素定位方式。【参考方案2】:

您应该按顺序执行:

IDNameClassNameXPath。任何可用的首先使用它。您还可以要求您的开发人员为每个元素添加唯一的 ID,这被认为是最好的方法。

【讨论】:

嗯,谢谢你的回答,但它并没有真正帮助我:p。【参考方案3】:

好吧,尽可能使用 UiAutomator,UiAutomation(默认情况下,客户端库会这样做 - 对于 Id/Name 等...-,除了速度较慢的 XPath,所以当你没有选择时使用它。

见https://github.com/appium/java-client/issues/158

我使用了一个函数,它接收字符串选择器的参数和每种类型的自定义枚举(id、xpath,甚至像 Android parentIdChildEditText 这样的自定义类型,仍然使用 UiAutomator 等......) -> 不要这样做!

经过多年的经验,如果可以的话,只需使用 AccessibilityId : 其中

对于 ios 是 name 在您的 appium xml 源 您的 ios 开发人员的可访问性标识符 对于 android 是 contentDesc 相同的 appium 源/开发标识符

否则,simplest 选择器适合您(即使 xpath 带有文本,但最好有自定义 test-id)。对于这类测试,选择器性能是最后一个问题,维护和健壮性是重点。

【讨论】:

这是怎么回事?

以上是关于我应该使用(最快)哪种方法来选择元素?的主要内容,如果未能解决你的问题,请参考以下文章

for 循环的 5 种写法,哪种最快?

我应该为 HTML 嵌入选择哪种音频格式和哪种压缩方式?

我应该选择哪种布局?

for 循环的 5 种写法,哪种最快?

算法(第4版)-2.5 应用

使用 xslt 创建语言选择器