2011-11-17 2 views
7

오이 테스트를 위해 카피 바라와 함께 이미지를 클릭하려고 시도하지만 카피 바라가 이미지를 링크로 볼 수있는 방법을 찾을 수 없습니다.오이에서 카피 바라를 사용하여 이미지를 클릭하십시오.

이미지에 대한 내 코드는 다음과 같습니다

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

html로에서

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

로 나타나, 나는 이미지를 클릭 카피 바라를 사용하는 좋은 방법을 찾을 수 없었습니다 어떤 .

제안 사항?

답변

9

이 작동합니다 : 주어진없이 이미지,

find("img[alt='Edit']").click 
+3

코드는 이미지와 관련된 링크를 클릭하지 않고 이미지 자체를 클릭 할 수 있지만 링크가있는 곳이면 어디서나. 이미지 뒤의 링크에 ID를 전달한 다음 해당 ID 이름에 대해 click_link를 사용했습니다. –

+1

어떤 드라이버를 사용하고 있습니까?Selenium에서 작동해야하지만 헤드리스 드라이버는 클릭을 상위 링크까지 전달할만큼 똑똑하지 않을 수 있습니다. –

+0

'@'(유효한 CSS 선택기로 만들기 위해)를 제거하십시오. – SirLenz0rlot

0

는 또한 레일에, (내 경우에는 3.1.1)주의 :

또는
find('img.icon16').click 

가 대체 텍스트를 기반으로 참조하기위한 : alt 값, 기본 alt는 image_tag 도우미에 의해 설정됩니다.

: alt - 대체 텍스트가 없으면 소스의 파일 이름 부분이 사용됩니다 (대문자와 확장자가없는) [From the Rails API]

그래서 예를 들어, 이미지 파일 "kitten.jpg"을 위해, 당신은 find("img[@alt='Kitten']").click (주 총액 및 확장의 제거)를 사용합니다.

이 레일 규칙을 사용하면 오이/카피 바라의 임의 이미지 링크를 검색 할 수 있습니다.

+0

... 모든 이미지에 의미가있는 대체 텍스트가 있어야한다는 점을 제외하면, 그렇게하지 않아도됩니다. –

1

동일한 ID로 페이지에 숨겨진 요소가 여러 개 있기 때문에 이미지를 인식하지 못했을 때 문제가있었습니다. 이런 식으로 사용해보십시오.

with_scope("#modal_window") do 
    find("#close").click 
1

이 단계는이 문제를 해결합니다. 요소를 일치시키고 부모를 찾으려면 xpaths를 사용해야합니다. 그래도 동기화되지 않을 수도 있습니다.

/?^(? : | an | a | the |) "([^ \"] ) 이미지 (?: | 내 "([^ \"]) ") $/

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

    outer = find(within) 
    outer.find(:xpath, "//img[@alt='#{alt}']/..").click 
end 
0

당신이 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'} 

하고 사용하지 않을 이드는 링크를 클릭하고 이미지를 사용합니다. 예를 들어 제 경우에는 링크를 클릭하여 클래스를 선언해야하고 나중에 nex를 사용할 수 있습니다 t 코드를 클릭하여 요소를 클릭하고 추가로 모달 연산을 확인하십시오.

within '#23' do 
    find('.delete').click 
    page.driver.browser.switch_to.alert.accept 
    end 
관련 문제