2017-02-07 3 views
0

Идея проста. У меня есть пользовательские UIButton:UIButton нельзя использовать в UITests

@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:

enter image description here

и isActive = true:

enter image description here

Все работает, как ожидалось, когда приложение работает. Но то же самое мне нужно делать под UITests. Все, что я делаю, - это нажать на эту кнопку ... но она не используется. Зачем?

Как выполнить крана?

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

Когда я нажимаю проверить, если isActive = true, если нет, то я отображать предупреждение ... предупреждение не должно быть под uitests, потому что я действительно нажмите на эту кнопку. Что здесь не так?

enter image description here

ответ

0

Если кнопка находится внутри клетки или другого вида контейнера, вы должны установить ячейку быть недоступны для вашей кнопки, чтобы быть доступной.

Смотрите мой ответ на этот вопрос: https://stackoverflow.com/a/42038145/5052894

Если вы хотите, чтобы иметь возможность проверить состояние кнопки из тестов пользовательского интерфейса, я предлагаю установки isSelected на кнопке, которая является частью UIControl, который UIButton наследует. Затем вы можете получить доступ к состоянию кнопки, используя XCUIElement.isSelected.