Тестирование пользовательского интерфейса Xcode [xcode7-beta6] - утверждение фактических значений меток при использовании меток доступности
Вопрос на самом деле очень прост:
Есть ли способ утверждать отображаемое значение с определенной метки (например, UILabel) при использовании метки доступности на этом объекте?
Насколько я понимаю, все утверждения (например, XCTAssertEquals), сделанные в примерах, будь то из WWDC Talk или Blogposts, проверяют только, существует ли элемент для запроса, такого как XCTAssertEquals(app.staticTexts["myValue"].exists, true)
или если количество ячеек в таблице правильное XCTAssertEquals(app.tables.cells.count, 5)
. Поэтому, избегая ярлыков доступности, можно проверить, отображается ли объект определенным значением, но не каким объектом/элементом. А при использовании ярлыков доступности он лишает меня возможности запросить отображаемые значения, потому что app.staticTexts["myValue"]
теперь не сможет предоставить результат, но app.staticTexts["myAccessibilityLabel"]
ударит.
Предполагая, что я хочу проверить свою функциональность "Добавить новую ячейку в таблицу", я могу проверить, что в списке добавлена новая ячейка, но я понятия не имею, добавлена ли новая ячейка в верхней или нижней части списка или где-то посередине.
Для меня простой способ проверить, имеет ли определенный элемент определенное значение, должен быть без проблем, когда дело доходит до тестирования пользовательского интерфейса.
Возможно, из-за недостающей документации я мог бы упустить очевидное. Если да, просто скажи мне.
Ответы
Ответ 1
Обязательно задайте свойство.accessibilityValue UILabel всякий раз, когда вы устанавливаете его значение.text. Затем в UITest вы можете проверить значение доступности следующим образом:
let labelElement = app.staticTexts["myLabel"]
...
XCTAssertEqual(labelElement.value as! String, "the expected text")
Ответ 2
Я думаю, вы задаете несколько разных вещей, поэтому я постараюсь ответить на каждый вопрос индивидуально.
-
Есть ли способ утверждать отображаемое значение с определенной метки (например, UILabel) при использовании метки доступности на этом объекте?
Короче говоря, нет. Тестирование пользовательского интерфейса работает, подключаясь к API доступности, поэтому вы ограничены запросом на объекты на основе этого. Тем не менее, вы можете проверить свойство -value
определенных элементов, таких как элементы управления. Это используется для проверки, включен или выключен переключатель. Обратите внимание, что эти кипятить вниз с использованием API-интерфейсов доступности также представляют собой другой метод (-accessibilityValue
через -accessibilityIdentifier
и -accessibilityLabel
).
-
... но я понятия не имею, добавлена ли новая ячейка в верхней или нижней части списка или где-то посередине.
Чтобы XCUIElement
для своего фрейма, вы можете использовать новый протокол XCUIElementAttributes
, который предоставляет -frame
. Например:
let app = XCUIApplication()
app.launch()
app.buttons["Add New Cell to Table"].tap()
let lastCell = app.cells["Last Cell"]
let newCell = app.cells["New Cell"]
XCTAssert(newCell.exists)
XCTAssert(newCell.frame.minY > lastCell.frame.maxY)
-
Для меня простой способ проверить, имеет ли определенный элемент определенное значение, должен быть без проблем, когда дело доходит до тестирования пользовательского интерфейса.
Если вы думаете обо всем в плане доступности, это становится проблемой. Тестирование пользовательского интерфейса может взаимодействовать только с вашими элементами через API-интерфейсы доступности, поэтому вы должны их реализовать. Вы также получаете дополнительное преимущество в том, чтобы сделать ваше приложение более доступным для пользователя с включенными настройками.
Попробуйте установить для -accessibilityLabel
или -accessibilityIdentifier
для отображаемого текста. Тестирование пользовательского интерфейса может быть весьма точным в отношении того, какой он использует.
-
Возможно, из-за недостающей документации я мог бы упустить очевидное. Если да, просто скажи мне.
У XCTest и UI Testing нет официальной документации. Поэтому я ушел и извлек свой собственный из файлов заголовков, открытых в рамках. Обратите внимание, что хотя они были вытащены из источника, они неофициальны.
Документация по тестированию XCTest/UI
Ответ 3
Что для меня работает, так это установить идентификатор доступности UILabel, чтобы сказать MyLabel
.
func myLabelText() -> String {
let myLabelUIElement: XCUIElement = self.application.staticTexts["MyLabel"]
return myLabelUIElement.label
}
Протестировано с помощью Xcode 8 и iOS 10
Ответ 4
На форумах Apple выглядит так, что можно получить значение метки:
Единственный способ, которым я нашел, - не устанавливать метку специальных возможностей, а вместо этого использовать идентификатор. Затем XCUIElement.label изменится в соответствии с текущим текстом метки.
Однако есть вопрос: если вы ранее устанавливали метку специальных возможностей в XC и удаляли ее, запись, указывающая на метку "", остается в раскадровке. В этом случае не только вызовет.label вернется "", но вы не сможете запросить ярлык по тексту!
Единственное, что вы можете сделать, это удалить и повторно добавить ярлык или вручную отредактировать xml.
lastobelus - https://forums.developer.apple.com/thread/10428