При написании тестового фреймворка / тестов с использованием Capybara + RSpec я натолкнулся на это предложение для тестирования элемента, НЕ существующего:
expect(page).to have_no_button('Save') # OK
expect(page).not_to have_button('Save') # Bad
Я был смущен, почему, пока я не увидел, было сказано:
Использовать версии must have_no_ * с сопоставителями RSpec, так как should_not
have_ * не ожидает тайм-аут от водителя.
Это правда? Если нет ... разве не имеет смысла с точки зрения объектной модели страницы иметь метод для проверки и возврата, если существует <element>
(я обычно использую .visible?
), таким образом вы можете использовать rspec matcher для выполнения expect(page_object).to be_method_visible
или expect(page_object).not_to be_method_visible
?
В отличие от необходимости писать 2 отдельных метода в объектах вашей страницы (если это не правда, что not_to
не будет ждать)
Для примера моих методов утверждения в моей объектной модели страницы, вот что я делаю для проверки «ссылки выхода из системы»
def logged_in?
logout_text.visible?
end
private
def logout_text
find 'a', text: 'Log Out'
end
А потом в спецификации я бы сказал:
expect(page_object).to be_logged_in
Так что я бы использовал нечто подобное для других элементов.