我目前正在进行移动UI自动化测试。我们的应用程序是基于Cordova的混合移动应用程序。所以我打算用appium来运行一些自动化测试。
我需要弄清楚的是如何找到页面中的所有元素。
我之前曾计划使用xpath查找所有元素,因为我们可以通过appium检查器检测xpath。但是,我的同事不同意我的意见,因为他想使用css选择器作为查找移动应用程序中所有元素的关键。但是对于appium,它不会在检查器中显示css选择器。
所以,我只是好奇哪种方法应该更好?
由于
答案 0 :(得分:5)
以下是我对Locators的细分以及我喜欢如何/为何使用iOS自动化。所有这些都是基于我使用Native iOS应用程序的经验。
巨型免责声明: 我对科尔多瓦一无所知。我听说如果有不是原生的类名,UIAutomation就会存在问题。如果是这种情况,我建议坚持使用辅助功能ID和类名定位器策略。
Appium中不存在CSS选择器。
最接近CSS Selectors的是Class Name选择器。我并没有真正使用它们,因为UIAutomation为我提供了我需要的东西,并允许我检查定位器策略中元素的名称/文本。
你不想使用XPath,因为它在iOS上很慢而且很有趣。 (它有时会返回一个完全不正确的元素)。它有时会导致仪器无故失败。强烈建议远离XPath。
当UIAutomation无法找到元素时,您应该使用它。它比XPath更快,但是当UIAutomation不允许你使用某个元素时会很有用(我认为.actionSheets()
已被破坏。我在操作表启动时使用它,我需要.click()
一个按钮)
您应该使用Apple的UIAutomation,2框架,因为它是iOS上最快的原生解决方案。
UIAutomation框架允许您使用类和层次结构来指定所需的元素。使用Appium时,请使用webdriver上的find_elements_by_ios_uiautomation
功能。
使用示例 here
但是示例用法并没有告诉你UIAutomation真的有多强大。我遇到的一个常见问题是当屏幕上有多个tableview时,试图找到tableview的所有单元格。
**Sample View Hierarchy**
<application>
<window>
<table name="Items">
<cell name="Foo, not in cart"></cell>
</table>
<table name="Cart">
<cell name="Bar. IM IN YOUR CART"></cell>
</table>
</window>
</application>
现在可以在数组中找到这些单元格:
value = '.tableviews()["Cart"].cells()'
cells = driver.find_elements_by_ios_uiautomation(value)
额外阅读: Guide超越了谓词以及为什么它们很棒
Inspector中有一个不错的地方(在Appium.app GUI中提供),它可以让你尝试任何你想要的定位器策略和值。你应该使用它。它非常有帮助。