Проверка видимости элемента с помощью Xcode 7 UITest

Я хочу проверить, виден ли элемент или нет, в зависимости от его свойства .hidden, но я не нахожу подходящего способа сделать это с помощью нового тестового материала пользовательского интерфейса Xcode 7.

Я пробовал с myelement.exists и myelement.hittable, но они не работают так, как я ожидал. Я предполагаю, что они работают в сочетании со свойством hidden. Скрытый элемент не должен существовать и не может быть поражен... но это не текущее поведение (я могу понять поведение exists... но скрытый элемент не должен быть поражен ИМО).

Есть ли другой способ проверить «скрытое» значение свойства?


person MatterGoal    schedule 20.10.2015    source источник


Ответы (6)


Начиная с Xcode 7.1 Beta 3, тестирование пользовательского интерфейса в настоящее время не поддерживает проверку видимости элемента. Предлагаю зарегистрировать радар, чтобы привлечь к Apple необходимое внимание.

Xcode 7.1 исправил эту проблему. hittable теперь проверяет правильность элемента.

person Joe Masilotti    schedule 20.10.2015
comment
Это не работает для меня на Xcode 7.1. Я динамически обновляю некоторые элементы управления до скрытых, а затем проверяю, и это всегда возвращает true, даже если элемент управления явно скрыт. - person Alex; 10.11.2015
comment
Тест Xcode 7.2 hittable также не работает должным образом для скрытых элементов - person Eugene Gordin; 17.12.2015
comment
Тест Xcode 7.2.1 hittable не работает должным образом для скрытых элементов - person san; 21.03.2016
comment
Я предлагаю отправить отчет об ошибке в Apple, если это не работает в Xcode 7.2. - person Joe Masilotti; 21.03.2016
comment
В Xcode 7.3 (7D175) hittable возвращает false для пользовательского NSControl с ролью специальных возможностей NSAccessibilityCheckBoxRole. Инспектор специальных возможностей не обнаружил с ним никаких проблем или ошибок, но он не может отображать свои свойства на панели инспектора при наведении на него курсора. Похоже, я пропустил что-то важное. - person Andriy; 31.05.2016
comment
Это свойство на XCUIElement теперь называется isHittable. Стоит прочитать документацию для случаев, когда он может возвращать true или false. - person mokagio; 16.02.2021

1) Я тестирую пользовательский интерфейс с помощью swift в Xcode 7.3, и я использую как .hittable, так и .exists для проверки того, скрыта ли метка или нет, и они оба работают. Я проверяю «истина» и «ложь», чтобы убедиться, что в любом случае они согласуются с результатом.

У меня есть метка, статический текст которой «Информация о дорожке» и она скрыта при первой загрузке приложения, а затем я нажимаю кнопку, чтобы отобразить метку, и вот результат после отображения метки.

// тест не пройден

let trackInfoLabel = app.staticTexts["Track info"]
XCTAssertEqual(trackInfoLabel.exists, true)

XCTAssertEqual(trackInfoLabel.hittable, true)

// тест проходит

XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)

// тест проходит

let trackInfoLabel = app.staticTexts["Track Info"]
XCTAssertEqual(trackInfoLabel.exists, true)

XCTAssertEqual(trackInfoLabel.hittable, true)

// тест не пройден

XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)

Буква, когда я нажимаю кнопку, чтобы скрыть метку, все результаты получаются противоположными. Это подтверждает, что оба свойства (hittable и exists) работают для параметра label.hidden.

2) Еще один способ узнать, скрыт ли элемент, это element.frame.size.width == 0 || элемент.frame.size.height == 0

person Ohmy    schedule 07.05.2016

XCUIElement.hittable работает для меня (в моем конкретном тестовом случае, когда я проверяю видимость нескольких элементов UIButton) - совершенно уверен, что это неправильный способ сделать это, хотя

person Andrew Z    schedule 27.10.2015

Следующий код работал для меня. В конце теста вы можете вставить код следующим образом:

while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
        sleep(1);
    }
person alex1704    schedule 23.12.2015

Я согласен, что hittable не всегда работает для кнопок (Swift 2.0, XCode 7.2)

Я только что обнаружил, что если кнопка видна, вы можете найти ее ТОЛЬКО среди кнопок, а если кнопка скрыта, вы можете найти ее тег и в staticTexts!

XCTAssertFalse(app.buttons["Log out"].exists && app.staticTexts["Log out"].exists) // This button is visible (hidden = false)
XCTAssert(app.buttons["Log in"].exists && app.staticTexts["Log in"].exists) // This one is hidden

Хаки, но работает для кнопок. Apple следует просто ввести .hidden или .visible вместе с .hittable и .exists.

person da-na    schedule 02.03.2016

Мое решение состоит в том, чтобы динамически добавлять accessibilityIdentifier

func someMethod() {
    label.isHidden = true
    label. accessibilityIdentifier = "isHidden"
}

func someOtherMethod {
    label.isHidden = false
    label. accessibilityIdentifier = "isVisible"
}

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

if app.staticTexts["MyLabel"].identifier == "isHidden" {
    dosomething()
}
person Randja    schedule 13.03.2018