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

Rails: Как использовать Capybara для проверки ссылки href-стоимости, не заботясь о тексте?

Capybara предлагает полезный метод проверки ссылки:

have_link

насколько я могу судить, можно использовать как:

have_link("link_text", :href => "actual link")

Однако мне не нужен link_text, скорее я просто хочу проверить href (поскольку привязка теста к тексту более хрупка). Если я хочу только проверить href, это будет просмотр.

Как использовать Capybara для проверки href без необходимости проверки текста? Может быть, я могу использовать регулярное выражение?

[изменить] изменена формулировка на основе ответа ниже

4b9b3361

Ответ 1

Capybara не предоставляет метод link_to, поэтому я не уверен, откуда вы это получаете (rails предоставляет link_to для генерации ссылок в представлении). Чтобы найти ссылку, основанную только на ее href, используя capybara, вы могли бы сделать

link = page.find(:css, 'a[href="actual link"]')

или если вы хотите утверждать, что элемент существует

page.assert_selector(:css, 'a[href="actual link"]')

или - если используется RSpec

expect(page).to have_selector(:css, 'a[href="actual link"]')

Так как ссылка по умолчанию ищет подстроки в тексте ссылки, вы также можете сделать

expect(page).to have_link(nil, href: 'actual link')

или

page.assert_selector(:link, nil, href: 'actual link')

Ответ 2

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

# RSpec matcher for links
# See {Capybara::Node::Matchers#has_link?}
def have_link(locator=nil, options={}, &optional_filter_block)
  locator, options = nil, locator if locator.is_a? Hash
  HaveSelector.new(:link, locator, options, &optional_filter_block)
end

Итак, если вам не нужен текст ссылки, вы можете спокойно опустить первый параметр и сделать это (синтаксис RSpec):

expect(page).to have_link(href: 'some url')
# or even
expect(page).to have_link(href: /some url regexp/)