it-roy-ru.com

Тестирование, если элемент видим с XCode 7 UITest

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

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

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

27
MatterGoal

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

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

27
Joe Masilotti

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)

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

2) Другой способ узнать, является ли элемент скрытым, вы можете сделать, это element.frame.size.width == 0 || element.frame.size.height == 0

9
Ohmy

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

3
Andrew Z

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

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

Я согласен, что 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 

0
da-na

Мое решение состоит в том, чтобы добавить 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()
}
0
Randja