我应该使用哪种方法(最快)到 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
所以我猜测使用 UIAutomator
和 UIAutomation
会更快,但是 Android 2.3+
需要 selendroid
。
你好吗?为什么?你能给我一些例子 findElementByAndroidUIAutomator(String using) 和 findElementByIosUIAutomation(String using)
我发现 XPath selector 存在一些问题。从我的角度来看,使用 findElement(By.name)
似乎很简单。
您应该按顺序执行此操作:
ID
、Name
、ClassName
、XPath
。有什么先用。您也可以要求您的开发人员为每个元素添加唯一 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 中找到它的方式。
驱动程序之间 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
所以我猜测使用 UIAutomator
和 UIAutomation
会更快,但是 Android 2.3+
需要 selendroid
。
你好吗?为什么?你能给我一些例子 findElementByAndroidUIAutomator(String using) 和 findElementByIosUIAutomation(String using)
我发现 XPath selector 存在一些问题。从我的角度来看,使用 findElement(By.name)
似乎很简单。
您应该按顺序执行此操作:
ID
、Name
、ClassName
、XPath
。有什么先用。您也可以要求您的开发人员为每个元素添加唯一 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 中找到它的方式。