2014-01-27 3 views
1

내 페이지는 고정되어있는 두 개의 div (상단 및 하단 섹션)를 포함하고 나머지 페이지는 스크롤 할 수 있습니다. 링크 요소 위로 마우스를 가져간 다음 링크 위로 마우스를 가져갈 때 나타나는 버튼을 클릭해야합니다. 나는 page-object gem을 사용하기 때문에 scroll_into_view를 사용하려고 시도했다. 그러나 링크는 여전히 고정 된 div 뒤에 있습니다. 이렇게하면 단추가 표시되지 않습니다. 그것을보기 위해 강제 할 수있는 일이 있습니까? 페이지의 스크롤 영역 위쪽과 아래쪽의 링크는 제대로 작동하지만 페이지 중간의 항목은 스크롤 할 때 고정 된 div 뒤에 표시되는 것과 같은 문제가 있습니다. 나는 페이지 객체 젬과 함께 ruby ​​+ watir-webdriver를 사용하고있다.고정 된 요소 뒤에 요소 가져 오기 페이지 개체 젬으로보기

불행히도 사이트를 게시 할 수 없습니다.

class MyPage 
    div(:items, :class => 'product_items') 

    def index_for(product) 
    index = items_elements.find_index{|x| x.h4_element.text == product} 
    index 
    end 

    def add_product(product) 
    index = index_for(product) 
    product = items_elements[index.to_i] 
    product.link_element(:class => 'product_more_info').when_present.scroll_into_view 
    product.link_element(:class => 'product_more_info').hover 
    product.button_element(:class => 'product_info_button').when_present.click 
    end 
end 

페이지의 중간에 링크가 고정 된 div 뒤에 남아 :

내 코드는 다음과 같이 보입니다. 그것이 가리키면 링크가 바로 뒤에 있기 때문에 헤더에있는 nav 드롭 다운을 실제로 트리거합니다. 링크의 70 %에서 작동하는 것 같습니다. 중간에있는 30 %가 당장 문제가됩니다.

+1

당신이 연결할 수있는 방법이 문제의 사이트? 네가 할 수 없다면 나는 이해한다. – snowe

+0

또한 코드를 게시하면 엄청난 도움이됩니다. – snowe

+0

흠. 그래서 당신을 이해하고 있다면, 당신은 당신이 가져 가야 할 링크가 있습니다. 마우스를 가져 가면 버튼이있는 무언가가 나타납니다. 그러나 링크가 일부 div 뒤에 있습니까? 이 요소 위로 마우스를 가져 가서 watir을 사용하지 않고 단추를 볼 수 있습니까? – snowe

답변

0

다음 페이지에서 문제가 재현 된 것 같습니다. 마우스를 올리려는 div 요소를 스크롤하면보기가 메뉴 아래에 나타납니다. 호버링은 온 마우스 오버를 유발하지 않습니다.

<html> 
    <body> 
    <div style="position:fixed; left:0; top:0; z-index=99999; border:2px solid red; width:100%">menu</div> 
    <div class="spacer" style="height:2000px"></div> 
    <div id="hoverable" onmouseover="document.getElementById('target').style.display = '';">to hover</div> 
    <button id="target" style="display:none;">the button</button> 
    <div class="spacer" style="height:2000px"></div> 
    </body> 
</html> 

적어도이 예제 페이지에서 작동하는 한 가지 해결책은 요소 위에 마우스를 올려 놓는 것입니다. 버튼이 나타나지 않으면 메뉴가 진행 중이라고 생각하고 페이지를 조금 뒤로 스크롤 한 다음 다시 시도하십시오. 위의 페이지를 가정하면, 이것은 페이지 객체와 함께 할 수있다 :

class MyPage 
    include PageObject 

    div(:hoverable, :id => "hoverable") 
    button(:target, :id => "target") 

    def hover() 
    # Try to hover over the element 
    hoverable_element.when_present.hover 

    # If the button element does not appear, the menu must be in the way. 
    # Scroll back up 100 px so that the div appears below the menu and try again. 
    unless target_element.visible? 
     execute_script('window.scrollBy(0,-100);') 
     hoverable_element.hover 
    end 

    # Check that the button appears as expected 
    p target_element.visible? 
    #=> true 
    end 
end 

페이지 객체에 동일한 아이디어를 적용의 add_product 방법이 될 것입니다 :

def add_product(product) 
    index = index_for(product) 
    product = items_elements[index.to_i] 
    product.link_element(:class => 'product_more_info').hover 
    unless button_element(:class => 'product_info_button').visible? 
    execute_script('window.scrollBy(0,-100);') 
    product.link_element(:class => 'product_more_info').hover 
    end 
    product.button_element(:class => 'product_info_button').click 
end 
+0

감사합니다 저스틴. 나는 그것을 시도해야 할 것이다. 여전히 페이지 나 스크린 샷을 게시 할 수있는 권한을 얻으려고합니다. –