Как получить переменные данные из метки в тестах пользовательского интерфейса

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

func testExample() {

    let app = XCUIApplication()
    let enterRomanNumeralsHereTextField = app.textFields["Enter roman numerals here"]
    enterRomanNumeralsHereTextField.tap()
    let convertButton = app.buttons["Convert"]

    //1
    enterRomanNumeralsHereTextField.typeText("LL")
    convertButton.tap()
    XCTAssertTrue(app.staticTexts.element(matching:.any, identifier: "Roman Numerals").label == "NotValidRomanNumber")


    //2
    enterRomanNumeralsHereTextField.typeText("LXXXIX")
    convertButton.tap()
    XCTAssertEqual(app.otherElements.containing(.staticText, identifier:"Roman Numerals").element.value as! String, "89")

    //3
    enterRomanNumeralsHereTextField.typeText("")
    enterRomanNumeralsHereTextField.typeText("LXXVIII")
    convertButton.tap()
    XCTAssertEqual(app.otherElements.containing(.staticText, identifier:"Roman Numerals").element.value as! String, "")



    // Use recording to get started writing UI tests.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
}

Первая попытка (обозначенная 1) дает мне ошибку сборки, говорящую: «Невозможно вызвать значение не функционального типа XCUIElement. Вторая попытка строится, но тест завершается неудачей, потому что, хотя метка действительно дает правильное значение, тест читает метку как пусто, что подводит нас к моей третьей попытке, которая проходит тест, потому что я сравнил ее с пустой этикеткой, что она и показывает.

Итак, как я уже сказал выше, мне просто интересно, как именно получить значение метки, которое является результатом «расчета» или нажатия кнопки.


person KoolaidLips    schedule 31.05.2017    source источник


Ответы (1)


К сожалению, когда в UITest осуществляется доступ к UILabel, свойство value XCUIElement не устанавливается вместе со свойством text объекта UILabel. Он всегда пуст.

XCUIElement также имеет свойство label, которое вы можете использовать для своих целей. Вам нужно только убедиться, что вы не устанавливаете accessibilityLabel на своем UILabel. Вместо этого используйте accessibilityIdentifier:

В вашем приложении:

label.accessibilityIdentifier = "Roman Numerals"

В вашем UITest:

XCTAssertEqual(app.staticTexts.element(matching:.any, identifier: "Roman Numerals").label, "89")
person joern    schedule 10.06.2017
comment
У меня действительно было много проблем с этим. Спасибо. - person andrei; 01.11.2017
comment
@joem Как вы узнали, какое свойство использовать ?? - person tomkaith13; 13.01.2018
comment
@tomkaith13 Я просмотрел ˋXCUIElementAttributesˋ, которым соответствует ˋXCUIElementˋ. Этот протокол определяет открытые атрибуты для всех элементов пользовательского интерфейса. Затем я просто взглянул на значения этих атрибутов на случай, если вы запросите ˋUILabelˋ. - person joern; 13.01.2018
comment
@joem Большое спасибо. Я тоже посмотрю там, когда застряну - person tomkaith13; 13.01.2018