Нажав на изображение с помощью капибары в огурце - PullRequest
8 голосов
/ 18 ноября 2011

Я пытаюсь щелкнуть изображение с помощью Капибары для теста на огурец, но не могу найти способ заставить Капибару увидеть изображение в виде ссылки.

Мой код для изображения:

link_to(image_tag('ico_edit_16.png', alt: 'Edit', class: 'icon16', title: "Edit #{qualification.title}"), edit_qualification_path(qualification))

Что отображается как

<a href="/qualifications/1/edit">
    <img class="icon16" title="Title" src="/images/ico_edit_16.png?1279303992" alt="Edit">
</a>

в html, и я не смог найти хороший способ использовать капибару, чтобы щелкнуть изображение.

Есть предложения?

Ответы [ 5 ]

13 голосов
/ 18 ноября 2011

Это должно работать:

find('img.icon16').click

В качестве альтернативы поиску на основе альтернативного текста:

find("img[alt='Edit']").click
1 голос
/ 15 сентября 2012

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

Когда / ^ я перехожу по ссылке, содержащей (?: | An | a | the |) "([^ \"] ) "изображение (?: | в пределах "([^ \"] ) ") $ /

do |*args|
  alt = args[0] ; within = args[1]

  outer = find(within)
  outer.find(:xpath, "//img[@alt='#{alt}']/..").click
end
1 голос
/ 20 апреля 2012

У меня была проблема, когда изображение не было распознано, потому что на странице было скрыто несколько элементов с одинаковым идентификатором. Попробуйте использовать что-то вроде этого.

with_scope("#modal_window") do
  find("#close").click
0 голосов
/ 10 августа 2013

Да, если вы используете что-то вроде моего случая в haml:

%div{id: "23", class: 'operations'}
  %a.delete{ href: '#', class: 'smallbtn'}
    %img{ src: 'assets/delete.png', alt: 'Delete'}

 %a.edit{ href: "#", class: 'smallbtn'}
   %img{ src: 'assets/edit.png', alt: 'Editar Producto'}

и вы не хотите использовать идентификатор, чтобы щелкнуть ссылку, и вы используете изображения, например, в моем случае, чтобы щелкнуть ссылку удаления, вам нужно объявить класс, а позже вы можете использовать следующий код, чтобы нажать на элемент и дополнительно для подтверждения модальной операции:

  within '#23' do
    find('.delete').click
    page.driver.browser.switch_to.alert.accept
  end
0 голосов
/ 03 января 2012

Также обратите внимание, что в Rails (3.1.1 в моем случае) для изображений без заданного значения: alt помощник image_tag устанавливает значение alt по умолчанию:

: alt - если текст alt не указан, используется часть имени файла источника (с заглавной буквы и без расширения) [Из Rails API]

Так, например, для файла изображения "kitten.jpg" вы должны использовать find("img[@alt='Kitten']").click (обратите внимание на заглавные буквы и удалить расширение).

Используя это соглашение по рельсам, вы можете искать произвольные ссылки на изображения в огурце / капибаре.

...