Отключите параметр «Подключить аппаратную клавиатуру» для симулятора при параллельном выполнении тестов пользовательского интерфейса Xcode 10 - PullRequest
0 голосов
/ 09 ноября 2018

Когда я запускаю свои тесты пользовательского интерфейса с включенным параллельным выполнением, создается несколько клонов существующего симулятора (например, iPad Air 2) для запуска разных наборов тестов.

В сценарии запуска из этого ответа stackoverflow я добавляю plist-ключ "ConnectHardwareKeyboard" со значением false, чтобы отключить подключение аппаратной клавиатуры, которое по умолчанию включено при запуске симулятора: Оборудование -> Клавиатура -> Подключение аппаратной клавиатуры

Этот скрипт правильно установит значение для существующих симуляторов (iPad Air 2), но когда тесты выполняются параллельно, создается несколько клонов iPad Air 2, и списки для клонов не являются клоном из оригинала. устройство. В списках клонированных устройств флаг не установлен, но Оборудование -> Клавиатура -> Подключить аппаратную клавиатуру отображается как выбранное.

Это приводит к сбою моих тестов пользовательского интерфейса, потому что отсутствует клавиатура, когда я пытаюсь закрыть клавиатуру после ввода теста в textField.

Я просмотрел множество постов на stackoverflow и форумах разработчиков Apple, чтобы попытаться решить эту проблему, но ничего не нашел. Это должно быть проблемой для других людей ... кто-нибудь там имел такую ​​же проблему и / или нашел решение?

1 Ответ

0 голосов
/ 25 июня 2019

Как и вы, я искал в интернете изысканное решение этой проблемы. Как и вы, я не нашел ни одного.

Таким образом, пока кто-то намного умнее меня не поймет это, я реализовал в своих тестах следующее:

import Foundation
import XCTest

extension XCUIApplication {

    //Hardware keyboard makes tests fail.  Reporting from these failures is ambiguous.  This function is intended to fix that issue (for now, until we figure out something better)
    public func keyboardReadyCheck() {
        if !self.keys["S"].waitForExistence(timeout: 3) {
            XCTFail("The software keyboard could not be found.  Use XCode Simulator settings to turn off hardware keyboard (Keyboard shortcut COMMAND + SHIFT + K while simulator has focus)")
        }
    }
}

Это позволяет мне набрасывать XCUIApplication.keyboardReadyCheck на протяжении всех тестов, что приведет к немедленному отказу, если аппаратная клавиатура включена.

Это не очень хорошее решение, но оно намного быстрее, чем наблюдение за запуском всего пакета и тайм-аутом на глупых вещах, которые он не может найти, и создание отчетов с "target not hittable" или "element not found", и я нам нужно выяснить, что случилось.

...