Как мне написать утверждение Capybara, которое проверяет наличие кнопки и ее включенное или отключенное состояние?

У меня есть приложение, которое включает / отключает кнопки в ответ на то, что происходит в пользовательском интерфейсе.

Я могу легко использовать капибару, чтобы определить, существует ли кнопка

should have_button 'save'

но я понятия не имею, как проверить состояние кнопки сохранения. То есть:

Как мне написать утверждение Капибары, которое проверяет наличие кнопкиа также его состояние включено или отключено?

Я взломал чек на отключенную кнопку; для включен, я полагаю, что я мог проверить, что есть соответствующая кнопка и что нет соответствующей отключенной кнопки. Но это, мягко говоря, неуклюже.

Это похоже на такую фундаментальную проверку пользовательского интерфейса, что я уверен, что что-то пропустил, но я могуКажется, не могу понять, что.

Продолжайте, основываясь на Грэйгатеответ:

Как я упоминал в комментарии, поведение Capybara зависит от основного драйвера. Мы используем webkit, и он возвращаетсяправда"/"ложный" Строковые результаты. Видимо, другие драйверы возвращают true / false. Люди в Капибаре знают об этой проблеме (github.com/jnicklas/capybara/issues/705), но они чувствуют (вероятно, правильно), что это не так.на самом деле их проблема, чтобы решить.

Вместо того, чтобы мои тесты зависели от драйвера, который я использую, я в итоге создал собственный сопоставитель:

RSpec::Matchers.define :be_enabled do
  match do |actual|
    driver_result = actual[:disabled]
    # nil, false, or "false" will all satisfy this matcher
    (driver_result.nil? || driver_result == false || driver_result == "false").should be_true
  end
end

RSpec::Matchers.define :be_disabled do
  match do |actual|
    driver_result = actual[:disabled]
    (driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
  end
end

Затем вы можете ввести:

user_license_area.find_button('Save').should be_disabled

Ответы на вопрос(5)

Ваш ответ на вопрос