Как получить список дочерних элементов элемента в Appium?

Я работаю с родным приложением iOS через Appium.

У меня есть следующая структура:

UIAApplication ->
                  UIAWindow ->
                              UIATextBox
                              UIALabel
                  UIAWindow ->
                              SomethingElse

Я нашел способ получить первое UIAWindow и хотел бы получить список всех элементов в этом окне. Как я могу это сделать?

Я хотел бы получить UIATextBox и UIALabel из первого окна UIAWindow, но НЕ элемента SomethingElse.

Как мне сделать список дочерних элементов в целом?

  @Test
  public void testListWindows() {
      List<MobileElement> windows = driver.findElementsByClassName("UIAWindow");
      List<MobileElement> elements = windows.get(0).?????
  }

2 ответа

Решение

Ты почти там. У вас есть список всех окон UIAW тогда, когда вам нужен список всех элементов первого окна UIAWindow. Я бы предложил использовать Xpath с подстановочным знаком.

Это даст вам каждый элемент, который является прямым потомком первого UIAWindow:

List<MobileElement> elements = driver.findElements(MobileBy.xpath("//UIAWindow[1]/*");

И это даст вам каждый дочерний элемент, дочерний элемент, вспомогательный дочерний элемент и т. Д. Первого окна UIA:

List<MobileElement> elements = driver.findElements(MobileBy.xpath("//UIAWindow[1]//*");

Дополнительный совет: если вы автоматизируете для iOS, я предполагаю, что это означает, что у вас есть доступ к OS X, где вы можете установить приложение Appium dot и использовать инспектор. Инспектор является отличным инструментом для проверки запросов xpath перед их внедрением в код.

Вы также можете найти текстовое поле и метку по классу приложения для iOS в Appium. Метод findElementsByClassName возвращает все элементы на текущем экране, которые соответствуют этому классу.

List<MobileElement> textFields = driver.findElementsByClassName("UIATextField");
MobileElement textField = textFields.get(0);

List<MobileElement> labels = driver.findElementsByClassName("UIAStaticText");
MobileElement label = labels.get(0);
Другие вопросы по тегам