我应该使用哪种方法(最快)到 select 元素?

Which method should I use (fastest) to select element?

驱动程序之间 select 元素有很多不同的方法。我想知道哪个最快最适合原生应用(iOS和Android)。

使用 Appium 驱动程序 class 有:

findElementByAccessibilityId(String using)

使用手机 class 有:

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

使用 Android 和 iOS 驱动程序 class 有:

findElementByAndroidUIAutomator(String using)
findElementByIosUIAutomation(String using)

并且使用 RemoteWebDriver class 有:

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 selector 存在一些问题。从我的角度来看,使用 findElement(By.name) 似乎很简单。

您应该按顺序执行此操作:

IDNameClassNameXPath。有什么先用。您也可以要求您的开发人员为每个元素添加唯一 ID,这被认为是最好的方法。

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

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

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

经过多年的经验,如果可以就使用 AccessibilityId :

  • for ios is name in your appium xml source <=> ios dev
  • 的可访问性标识符
  • 对于 android 是 contentDesc <=> 相同的 appium source/dev 标识符

否则,最简单的 选择器(即使是带文本的 xpath,最好还是有自定义测试 ID)。对于这些类型的测试,选择器性能是最后一个问题,维护和健壮性是重点。

How do you do and why? Can you provide me some examples for findElementByAndroidUIAutomator(String using) and 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 中找到它的方式。