在UITests下不能使用UIButton

时间:2017-02-07 09:20:20

标签: ios swift xcode xcode-ui-testing

这个想法很简单。我有自定义UIButton

@IBDesignable class RadioButton: AttributedButton {

    private let attributedView = AttributedView(frame: CGRect(x: 0, y: 0, width: 16, height: 16))

    @IBInspectable var isActive: Bool = false {

        didSet {

            attributedView.removeFromSuperview()

            attributedView.center = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
            attributedView.layer.borderWidth = 1
            attributedView.cornerRadius = 8

            attributedView.backgroundColor = isActive ? UIColor.scooter : UIColor.white
            attributedView.layer.borderColor = isActive ? UIColor.scooter.cgColor : UIColor.silver.cgColor
            addSubview(attributedView)
        }
    }
}

这是isActive = false

时的外观

docs

isActive = true

enter image description here

当应用运行时,一切都按预期工作。但我需要在UITests下做同样的事情。我所做的只是点击那个按钮...但它没有被点击。为什么呢?

如何进行点按?

let termsRadioButton = app.buttons["termsRadioButton"]
termsRadioButton.tap()

点按后我会检查isActive = true是否为{{1}},如果没有,则显示警告...警告不应该在uitests下,因为我真的点击了那个按钮。这有什么不对?

enter image description here

1 个答案:

答案 0 :(得分:0)

如果按钮位于单元格或其他容器视图中,则必须将单元格设置为无法访问按钮才能访问。

请参阅我对此问题的回答:https://stackoverflow.com/a/42038145/5052894

如果您希望能够从UI测试中检查按钮的状态,我建议在按钮上设置isSelected,这是UIButton继承的UIControl的一部分。然后,您可以使用XCUIElement.isSelected访问按钮的状态。