2017-02-07 1 views
0

Die Idee ist einfach. Ich habe benutzerdefinierte UIButton:UIButton kann nicht unter UITests angetippt werden

@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) 
     } 
    } 
} 

Dies ist, wie es aussieht, wenn isActive = false:

enter image description here

und isActive = true:

enter image description here

Alles funktioniert wie erwartet, wenn App läuft. Aber das gleiche muss ich unter UITests tun. Alles, was ich tue, ist Tippen auf diesen Knopf ... aber es wird nicht angezapft. Warum?

Wie führe ich einen Wasserhahn?

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

Sobald ich tippe ich überprüfen, ob isActive = true, wenn nicht, dann eine Warnung für I ... alert nicht unter uitests sein sollte, weil ich wirklich, dass Taste tippen. Was ist hier falsch?

enter image description here

Antwort

0

Wenn die Taste innerhalb einer Zelle oder einem anderen Behälter Ansicht ist, werden Sie die Zelle setzen müssen nicht zugänglich zu sein für Ihre Taste zugänglich sein.

Siehe meine Antwort auf diese Frage: https://stackoverflow.com/a/42038145/5052894

Wenn Sie den Status der Schaltfläche zu prüfen, von den UI-Tests in der Lage sein wollen, schlage ich vor isSelected auf die Schaltfläche Einstellung, die Teil UIControl, die UIButton ist erbt von. Sie können dann mit XCUIElement.isSelected auf den Status der Schaltfläche zugreifen.

Verwandte Themen