如何使用UIAutomation谓词查找UIATableView子元素?

时间:2016-01-15 18:52:14

标签: java ios selenium xpath

我使用Appium(基于Selenium)为我的iOS应用程序编写UI测试。

我的问题是按照它们出现的顺序找到UITableView的所有单元格和组。

例如,此结构表示第一组打开的表:
UIATableGroup
--UIATableCell
--UIATableCell
--UIATableCell
--UIATableCell
UIATableGroup
UIATableGroup
UIATableGroup
UIATableGroup

我可以使用xpath:

按上述顺序获取列表
driver.findElements(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/*"))

问题是xpath非常慢,所以我一直在使用iOS UIAutomation调用重构代码。

我可以使用此谓词获取所有组:

driver.findElements(MobileBy.IosUIAutomation(".tableViews()[0].groups()[0]"))

和所有细胞:

driver.findElements(MobileBy.IosUIAutomation(".tableViews()[0].cells()[0]"))

但问题是我想要同时保留上面的订单。

在黑暗中猜测:

driver.findElements(MobileBy.IosUIAutomation(".tableViews()[0].withPredicate(\"ALL valid == true\")"));

这个想法是使用这样一个事实,即两个组和单元都有一个有效的'但这只会使测试崩溃。

如何获得与xpath相同的UIAutomation /谓词?

1 个答案:

答案 0 :(得分:3)

经过一番猜测,我能够想出这个:

driver.findElements(MobileBy.IosUIAutomation(".tableViews()[0].elements()"))

它仍然很慢,但它确实有效。