Подтвердить что ты не робот

Как вы тестируете, если div имеет определенный стиль css в rspec/capybara?

Как вы проверяете, имеет ли тег div определенный стиль css? Я пытаюсь проверить, имеет ли он display:none; или display:block.

Я попробовал следующее, но это дало мне ошибку:

it {should have_selector('signup_server_generic_errors', /display:\s*none/)}
4b9b3361

Ответ 1

Я бы рекомендовал вместо того, чтобы искать стиль css, вместо этого вы пишете свои тесты, чтобы найти имя класса css.

Таким образом вы можете изменить базовый стиль css, сохраняя класс таким же, и ваши тесты все равно пройдут.

Поиск базового стиля является хрупким. Стили меняются часто. Основываясь на ваших rspecs на поиске определенных элементов стиля, ваши тесты становятся более хрупкими - они с большей вероятностью потерпят неудачу, когда все, что вы делаете, изменит внешний вид div.

Основываясь на ваших тестах на поиск классов css, тесты становятся более надежными. Это позволяет им обеспечить правильность работы вашего кода, не требуя от вас изменения при изменении стиля страницы.

В этом случае, определенно, одним из вариантов может быть определение класса css с именем .hidden, который устанавливает display:none; на элемент, чтобы скрыть его.

Вот так:

CSS

.hidden {
  display:none;
}

HTML:

<div class="hidden">HIDE ME!</div>

водосвинка:

it {should have_css('div.hidden') }

Этот capybara просто ищет div с классом hidden - вы можете сделать этот помощник более сложным, если вам нужно.

Но главное - присоединить стили к именам классов css, а затем привязать свои тесты к классам, а не к стилям.

Ответ 2

Вы могли бы использовать has_css? согласовани. Может принимать :visible варианты. Для более подробной информации вы можете проверить документы: http://rdoc.info/github/jnicklas/capybara/Capybara/Node/Matchers#has_css%3F-instance_method

Например, вы можете попробовать:

it { should have_css('div.with-some-class', :visible => true) }

Ответ 3

Мой способ убедиться, что элемент имеет определенный класс:

let(:action_items) { page.find('div.action_items') }

it "action items displayed as buttons" do
  action_items.all(:css, 'a').each do |ai|
    expect(ai[:class]).to match(/btn/)
  end
end

или что-то вроде этого

expect(ai[:style]).to match(/color: red/)

Я нашел его здесь: http://rubydoc.info/github/jnicklas/capybara/Capybara/Node/Element#%5B%5D-instance_method