如何在Appium中获取元素的子元素列表?

时间:2015-12-13 20:02:13

标签: ios selenium selenium-webdriver appium appium-ios

我通过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).?????
  }

2 个答案:

答案 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);