如何使用XCUITest在SkyFloatingLabelTextField中获取浮动标题的内容?

时间:2017-10-25 16:00:28

标签: swift unit-testing xcuitest skyfloatinglabeltextfield

在我的XCUITests中,我需要在验证错误后检查SkyFloatingLabelTextField中浮动标题标签的内容。

我已经为SkyFloatingLabelTextField元素设置了accessibilityIdentifier,因此我可以点击并输入文本而不会出现任何问题,但如何仅使用XCUIElement访问其标题(titleLabel?)?

我尝试将titleLabel设置为具有自己的accessibilityIdentifier的accessibilityElement,但之后我无法访问测试中的文本字段。

2 个答案:

答案 0 :(得分:1)

您将需要添加扩展名SkyFloatingLabelTextField:

extension SkyFloatingLabelTextField {
    override open var accessibilityIdentifier: String? {
        didSet {
            isAccessibilityElement = false
            titleLabel.isAccessibilityElement = true
            titleLabel.accessibilityIdentifier = (accessibilityIdentifier ?? "") + "Title"
        }
    }
}

在控制器中,您需要添加accessibilityIdentifier:

@IBOutlet weak var textField: SkyFloatingLabelTextField!
textField.accessibilityIdentifier = "YourTextFieldIdentifier"

如果您想从XCTestCase中的textfild获得标题,请执行以下操作:

let app = XCUIApplication()
app.launch()
let elementsQuery = app.scrollViews.otherElements

let getTitle = elementsQuery.textFields["YourTextFieldIdentifier"].staticTexts["YourTextFieldIdentifierTitle"]
            XCTAssertEqual(getTitle.label, "Your set title text")

elementsQuery.textFields["YourTextFieldIdentifier"].tap()
elementsQuery.textFields["YourTextFieldIdentifier"].typeText("Type text")

答案 1 :(得分:0)

SkyFloatingLabelTextField继承自UITextField,因此适用于UITextField的任何方法都适用于SkyFloatingLabelTextField