Как запросить «Главное окно» в тестах пользовательского интерфейса iOS? - PullRequest
0 голосов
/ 05 июля 2018

В какой-то момент в моих тестах мне нужно взаимодействовать с представлениями, которые находятся внутри Main Window. Когда я делаю po app.windows, я получаю это:

Find: Target Application 0x1c40d7680
  Output: {
    Application, 0x1c4389170, pid: 4765, {{0.0, 0.0}, {375.0, 667.0}}, label: 'Mercedes PRO [testb2b]'
  }
  ↪︎Find: Descendants matching type Window
    Output: {
      Window, 0x1c43890a0, {{0.0, 0.0}, {375.0, 667.0}}
      Window, 0x1c438dc30, {{0.0, 0.0}, {375.0, 667.0}}
      Window, 0x1c438dea0, {{0.0, 0.0}, {375.0, 667.0}}
      Window, 0x1c438e6c0, Main Window, {{0.0, 0.5}, {375.0, 667.0}}
    }

Мне нужно запросить Main Window, так как у меня почти те же представления в первом окне из этого списка, поэтому я хочу отделить их. Итак, я попытался запросить его с помощью app.windows["Main Window"], но похоже, что Main Window не является идентификатором для представления окна.

Печать всех XCUIElementAttributes (например, title, value, identifier и т. Д.) Не дала мне много информации (в основном это пустые строки). Кроме того, я не хочу запрашивать его по позиции (например: app.windows.element(boundBy: 3)), поскольку я не уверен, что это окно всегда будет в этой позиции.

Есть ли другой способ запроса Main Window?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

То, что я пытался достичь, это поместить идентификатор в объект окна. Я попытался добавить его в ViewController, который показывает представления, которые я пытаюсь запросить с помощью этой строки кода (в viewDidLoad()):

UIApplication.shared.delegate?.window??.accessibilityIdentifier = "Main Window"

И я продолжал получать идентификатор не в том месте:

Find: Target Application 0x60c0000c1260
  Output: {
    Application, 0x60c00018c640, pid: 33496, {{0.0, 0.0}, {414.0, 736.0}}, label: '[testb2b]'
  }
  ↪︎Find: Descendants matching type Window
    Output: {
      Window, 0x60c00018c710, {{0.0, 0.0}, {414.0, 736.0}}, identifier: 'Main Window'
      Window, 0x60c000191370, {{0.0, 0.0}, {414.0, 736.0}}
      Window, 0x60c0001915e0, {{0.0, 0.0}, {414.0, 736.0}}
      Window, 0x60c000191c60, Main Window, {{0.0, 0.5}, {414.0, 736.0}}
    }

Затем я нашел место в коде, где разработчики создали новое окно, которое они использовали для хранения этого VC.

let actionVC = UIStoryboard.findViewController(withIdentifier: "ActionViewController")
if let appWindow = UIApplication.shared.delegate?.window {
     let window = UIWindow.init(frame: appWindow.frame)
     window.rootViewController = actionVC
     window.accessibilityIdentifier = "Main Window"
}

Это позволило мне написать запрос вроде этого: app.windows["Main Window"] и быть уверенным, что я нацеливаюсь на настоящий Main Window.

Find: Target Application 0x60c0000c1260
  Output: {
    Application, 0x60c00018c640, pid: 33496, {{0.0, 0.0}, {414.0, 736.0}}, label: '[testb2b]'
  }
  ↪︎Find: Descendants matching type Window
    Output: {
      Window, 0x60c00018c710, {{0.0, 0.0}, {414.0, 736.0}}
      Window, 0x60c000191370, {{0.0, 0.0}, {414.0, 736.0}}
      Window, 0x60c0001915e0, {{0.0, 0.0}, {414.0, 736.0}}
      Window, 0x60c000191c60, Main Window, {{0.0, 0.5}, {414.0, 736.0}}, identifier: 'Main Window'
    }
0 голосов
/ 27 августа 2018

Лучшим способом, который я нашел, была фильтрация окон по размеру кадра.

let window = app.windows.allElementsBoundByIndex.first { element in
                element.frame.width > 10
            }!

Я отредактирую это, если найду лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...