2014-11-28 4 views
0

내가 좋아하는 내 CSS 별칭이 있습니다Watir과 : 첫 번째 테이블 셀 내부의 A-HREF에 대한 선택

@page.find("FIRST_TABLE_CELL_HREF").when_present.right_click 

: 나는을 원하는

module MyPage 

    def locator(key, *options) 
    hash = { 
     "FIRST_TABLE_CELL_HREF" => [ :css => '#my-table td:nth-child(1):first a'] 
    } 
    end 

그 별칭을 클릭 문제 :은 자바 스크립트 스타일 별칭이므로 작동하지 않습니다.

질문 :동일한 루비 스타일 CSS 별칭을 작성하는 방법은 무엇입니까?

P.$('#my-table td:nth-child(1):first a')은 브라우저 콘솔에서 잘 작동합니다.

@TitusFortner의 경우 특정 요소를 선택하려는 경우에 해당됩니다. 하지만 비즈니스 수준의 언어 (내 경우에는 작은 오이)를 사용하고 있으며 보편적 인 지침을 작성하려고합니다. When I right click on the element "FIRST_TABLE_CELL_HREF"처럼 보일 것입니다. 그 명령이 매핑 될 것이다 :

When(/^I right click(?: on|)(?: the|) "([^\"]*)"$/i) do |scope| 
    @page.find(scope).when_present.right_click 
end 

경우 다시 Watir과 함께 @browser = BrowserBase.new start_browser(ENV['BROWSER'])

+0

을 링크가 첫 번째 테이블 셀에있는 경우, 즉이 테이블의 첫 번째 링크입니다 의미합니까? 'find' 메소드를 어떻게 정의했는지에 따라,': css => '# my-table a''를 할 수 있습니다. 'find' 메소드의 정의와 HTML 테이블의 예제를 제공함으로써 질문을 명확히하는 데 도움이 될 것입니다. –

+0

@JustinKo''FIRST_TABLE_CELL_HREF "=> [: css => '# my-table a', : index => 0]'? 그건 나를 위해 작동하지 않습니다 –

+0

Watir이 암시 적으로 그렇게하기 때문에 나는': index => 0'없이 생각했습니다. 그러나 그것이 작동하지 않는다면, find 메소드가하는 일을 공유하고 문제를 보여주는 예제 테이블을 제공해야한다고 생각합니다.불행히도 그것이 작동하지 않는다는 것을 아는 것이 문제/해결책을 결정하는 데 도움이되지는 않습니다. –

답변

2

가 자주도에 CSS를

browser = Watir::Browser.new

먼저 링크를 사용할 필요가 없습니다 @page = @browser.visit(SomePage), 표 :

browser.table(id: 'my-table').link

테이블의 첫 번째 데이터 셀에 0

링크 :

browser.table(id: 'my-table').td.link

은 어떤 이유로 단지 CSS를해야하는 경우 :

또한 browser.link(css: '#my-table a')

테이블이의 컨텍스트 내 경우 iframe의 경우 명시 적으로 선언하지 않으면 드라이버가 최상위 수준의 탐색 컨텍스트 만 볼 수 있기 때문에이를 명시 적으로 선언해야합니다. Watir과 함께이 작동합니다 :

browser.iframe(id: 'iframe_id').table(id: 'my-table').link

이 작동하지 않을 :

browser.link(css: '#iframe_id #my-table a')

+0

업데이트 된 질문의 마지막 섹션을 참조하십시오 –

+0

원하는 요소를 찾지 못합니까? @ browser.element (css : '# my-table td a') ' 그렇지 않은 경우 iframe 내부에 있는지 확인할 수 있습니까? 두 번째 우려 사항은 css가 항상 필요한 것만 수행하는 것은 아니며 오이를 사용하면 전혀 영향을받지 않습니다. 현재 찾기 방법은 다음과 같습니다. '{ 'FIRST_TABLE_CELL_HREF'=> "table (id : 'my-table'). td"} 로케이터 메소드가 다음과 같은 해시를 반환하는 경우 : {@ browser.element (css : locator [scope]) ' 그러면 find 메소드는 다음과 같을 수 있습니다 : '@ browser.send (locator (scope))' – titusfortner