Я использую RSpec2 и Capybara для приемочного тестирования.
Я хочу заявить, что ссылка отключена или нет в Capybara. Как я могу это сделать?
ruby-on-rails
rspec
capybara
крийсна
источник
источник
Другое простое решение - получить доступ к искомому атрибуту HTML
[]
:find('#my_element')['class'] # => "highlighted clearfix some_other_css_class" find('a#my_element')['href'] # => "http://example.com # or in general, find any attribute, even if it does not exist find('a#my_element')['no_such_attribute'] # => ""
Обратите внимание, что
Capybara
будет автоматически пытаться дождаться завершения асинхронных запросов, но в некоторых случаях это может не работать:Вот одно решение, если у вас возникли проблемы с утверждениями для элементов, которые обновляются асинхронно:
источник
find('a#my_element[href]')
, можно ли получить значение этого атрибута? Попытка использовать такие выражения, как,find('a#my_element[href]').value
но, похоже, не работает :(find('a#my_element[href]').text
илиfind('a#my_element[href]').native
. Сообщите мне, если какой-либо из них даст ожидаемые результаты.Было немного запутано найти правильный xpath, вот правильный,
используя capybara 0.4.1.1
# <a href="https://stackoverflow.com/clowns?ordered_by=clumsyness" class="weep">View Clowns</a> page.should have_xpath("//a[@class='weep'][@href='/clowns?ordered_by=clumsyness']", :text => "View Clowns")
Если у вас есть только ссылка без класса, используйте
page.should have_link('View Clowns', :href => '/clowns?ordered_by=clumsyness')
Что-то вроде этого, к сожалению, не сработает:
page.should have_link('This will not work!', :href => '/clowns?ordered_by=clumsyness', :class => "weep")
Параметр класса будет проигнорирован.
источник
Я рекомендую использовать
have_link
иfind_link(name)[:disabled]
в двух отдельных утверждениях. Хотя выполнение только второго утверждения проще, это делает сообщения об ошибках об отсутствующих ссылках более привлекательными, что упрощает чтение результатов тестирования.expect(page).to have_link "Example" expect(find_link("Example")[:disabled]).to be false
Обратите внимание, что
"Example"
можно изменить имя или идентификатор ссылки.источник
page.should have_link('It will work this way!', {:href => '/clowns?ordered_by=clumsyness', :class => "smile"})
have_link ожидает хэш параметров, который будет пустым, если вы их не предоставите. Вы можете указать любые атрибуты, которые должна иметь ссылка - просто убедитесь, что вы передаете все параметры в ОДНОМ хэше.
Надеюсь это поможет
PS: Для таких атрибутов, как data-method, вы должны передать имя атрибута в виде строки, поскольку дефис разбивает символ.
источник
class:
недействителенПо возможности вам следует попытаться использовать предоставленные Capybara оболочки, которые будут более согласованно работать с драйверами.
В конкретном случае
disabled
оболочка была представлена в 2.1: https://github.com/jnicklas/capybara/blob/fc56557a5463b9d944207f2efa401faa5b49d9ef/History.md#version-210Если вы воспользуетесь им, вы получите разумные результаты как на RackTest, так и на Poltergeist:
HTML:
<input type="text" id="disabled-false" ></div> <input type="text" id="disabled-true" disabled></div> <input type="text" id="disabled-js-true" ></div> <input type="text" id="disabled-js-false" disabled></div> <script> document.getElementById('disabled-js-true').disabled = true document.getElementById('disabled-js-false').disabled = false </script>
Тесты:
!all(:field, 'disabled-false', disabled: false).empty? or raise all(:field, 'disabled-false', disabled: true ).empty? or raise all(:field, 'disabled-true', disabled: false).empty? or raise !all(:field, 'disabled-true', disabled: true ).empty? or raise all(:field, 'disabled-js-true', disabled: true ).empty? or raise all(:field, 'disabled-js-false', disabled: false).empty? or raise Capybara.current_driver = :poltergeist !all(:field, 'disabled-false', disabled: false).empty? or raise all(:field, 'disabled-false', disabled: true ).empty? or raise all(:field, 'disabled-true', disabled: false).empty? or raise !all(:field, 'disabled-true', disabled: true ).empty? or raise !all(:field, 'disabled-js-true', disabled: true ).empty? or raise !all(:field, 'disabled-js-false', disabled: false).empty? or raise
Обратите внимание, как при использовании этого вместо селекторов CSS тесты Javascript будут работать без каких-либо изменений, если вы начнете использовать драйвер с поддержкой Js.
Runnable тестовый файл здесь .
источник
Bowsersenior , спасибо за подсказку
Вот пример:
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
источник
Используя синтаксис Rspec3, я сделал это так:
expect(page).not_to have_selector(:link_or_button, 'Click here')
источник
Просто вы можете использовать
page.has_css?
методpage.has_css?('.class_name')
это вернется,
true
если элемент существует.Выполните некоторые действия на основе проверки.
page.has_css?('.class_name') do #some code end
источник
Согласно документации, вы можете использовать синтаксис аксессора [attribute]:
find('#selector')['class'] => "form-control text optional disabled"
Для инвалидов вы также можете сделать это:
expect(find('#selector').disabled?).to be(true)
источник