Нажатие клавиши «Далее» на клавиатуре с помощью UIAutomation - PullRequest
7 голосов
/ 06 января 2012

У меня есть поле поиска в моем приложении, и я установил тип клавиши возврата клавиатуры для этого поля на UIReturnKeyNext. Я пытаюсь написать тест UIAutomation, который нажимает кнопку Далее на клавиатуре, используя следующую строку:

UIATarget.localTarget().frontMostApp().mainWindow().keyboard().keys().firstWithName("next");

Этот вызов не выполняется, поскольку ключ с именем «следующий» не найден. Я сделал дамп всех элементов моего приложения, используя:

UIATarget.localTarget().frontMostApp().logElementTree();

Это показывает, что на клавиатуре действительно есть клавиша с именем «next», но моя попытка получить ее, как показано выше, все равно не удалась. Однако я могу получить другие ключи (например, ключ для буквы «u»), используя этот метод. Здесь есть известная проблема или я что-то не так делаю?

Я пробовал другие варианты без удачи:

UIATarget.localTarget().frontMostApp().mainWindow().keyboard().elements()["next"];

Вот снимок экрана элементов в моей UIAKeyboard:

return key dump

Ответы [ 5 ]

4 голосов
/ 19 марта 2013

Если вы просто хотите щелкнуть по нему, и вы знаете, что на клавиатуре есть «next» как «клавиша возврата» (определено в вашем перо), тогда вы можете использовать это:

2 голосов
/ 08 января 2012

У меня нет примера для тестирования, но кнопка «Далее» - это кнопка UIA, а не кнопка UIA, которую вы можете попробовать:

UIATarget.localTarget().frontMostApp().mainWindow().keyboard().buttons()["next"];

Если это не сработает, вы также можете попробовать

UIATarget.localTarget().frontMostApp().mainWindow().keyboard().buttons()[4];
1 голос
/ 28 августа 2018

Jelle подход работал для меня.Но я также нашел альтернативный способ, если кому-то это нужно.

XCUIApplication().keyboards.buttons["return"].tap()

Где вы можете создать XCUIApplication () в качестве одиночного элемента в каждом сеансе тестирования пользовательского интерфейса.Особенность этого подхода в том, что теперь вы можете различать return и done и другие варианты и даже проверять их существование.

Вы можете пойти дальше и сделать что-то вроде следующего:

extension UIReturnKeyType {
    public var title: String {
        switch self {
        case .next:
            return "Next"
        case .default:
            return "return"
        case .continue:
            return "Continue"
        case .done:
            return "Done"
        case .emergencyCall:
            return "Emergency call"
        case .go:
            return "Go"
        case .join:
            return "Join"
        case .route:
            return "Route"
        case .yahoo, .google, .search:
            return "Search"
        case .send:
            return "Send"
        }
    }
}

extension XCUIElement {
    func tap(button: UIReturnKeyType) {
        XCUIApplication().keyboards.buttons[button.title].tap()
    }
}

И вы можете использовать его как:

let usernameTextField = XCUIApplication().textFields["username"]
usernameTextField.typeText("username")
usernameTextField.tap(button: .next)
1 голос
/ 09 января 2012

У меня работает следующее:

UIATarget.localTarget().frontMostApp().mainWindow().keyboard().buttons().firstWi‌​thPredicate("name contains[c] 'next'"); 
0 голосов
/ 04 февраля 2015

Для меня клавиатура не попадает под mainWindow () в иерархии просмотра. Он находится на том же уровне, что и mainWindow (), когда вы входите в logElementTree () с верхнего уровня. Итак, что вы хотите сделать, это:

UIATarget.localTarget().frontMostApp().keyboard().buttons()["next"];

Это сработало для меня, когда я пытался нажать кнопку «Поиск» на клавиатуре.

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