我通过Appium与原生iOS应用程序合作。
我有以下结构:
UIAApplication ->
UIAWindow ->
UIATextBox
UIALabel
UIAWindow ->
SomethingElse
我找到了获得第一个UIAWindow的方法,我想获得该窗口中所有元素的列表。我该怎么做?
我想从第一个UIAWindow获取UIATextBox和UIALabel但不是SomethingElse元素。
我如何做一般的子元素列表?
@Test
public void testListWindows() {
List<MobileElement> windows = driver.findElementsByClassName("UIAWindow");
List<MobileElement> elements = windows.get(0).?????
}
答案 0 :(得分:3)
你几乎就在那里。当你想要的是第一个UIAWindow的所有元素的列表时,你所拥有的是给你一个所有UIAWindows的列表。我建议使用带有通配符的Xpath。
这将为您提供第一个UIAWindow的直接子项的所有元素:
List<MobileElement> elements = driver.findElements(MobileBy.xpath("//UIAWindow[1]/*");
这将为您带来第一个UIAWindow的每个孩子,子孩子和子子等:
List<MobileElement> elements = driver.findElements(MobileBy.xpath("//UIAWindow[1]//*");
额外提示:如果您为iOS自动化,我认为这意味着您可以访问OS X,您可以在其中安装Appium dot应用程序并使用检查器。检查器是一个很好的工具,可以在将xpath查询放入代码之前对其进行测试。
答案 1 :(得分:1)
您还可以在Appium中找到适用于iOS应用的类的文本字段和标签。 findElementsByClassName方法将返回当前屏幕上与该类匹配的所有元素。
List<MobileElement> textFields = driver.findElementsByClassName("UIATextField");
MobileElement textField = textFields.get(0);
List<MobileElement> labels = driver.findElementsByClassName("UIAStaticText");
MobileElement label = labels.get(0);