2015-10-20 4 views
23

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

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

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

ответ

23

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

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

+2

Это не работает для меня на Xcode 7.1. Я обновляю некоторые элементы управления до скрытых динамически и проверяю потом, и это всегда возвращает true, даже если элемент управления явно скрыт. – Alex

+0

Xcode 7.2 hittable test не работает должным образом для скрытых элементов, либо –

+0

Xcode 7.2.1 тест hittable не работает должным образом для скрытых элементов – san

3

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

2

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

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

Я согласен не мячей по всегда работает для кнопок (Swift 2,0, 7,2 XCode)

Я только что обнаружил, что если кнопка видна , вы можете найти его ТОЛЬКО среди кнопок, а если кнопка скрыта, вы можете найти ее в тегах 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

5

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

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

// тест не

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) 

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

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