2016-08-17 5 views
0

일부 테스트를 자동화하기 위해 rspec-watir을 사용하고 있으며 최근에 이상한 문제가 발생했습니다.
배경 : 검색을 수행하고 16 (특히 16) 개의 카드를 선택한 다음 섹션에 추가하는 방법을 만든 select_cards(cards)이라는 방법이 있습니다 ... 최근에 구성을 수정하여 화면 창이 1920x1080 (@browser.window.resize_to(1920, 1080))에서 시작되도록
Watir-webdriver; 창 크기 변경으로 인해 메서드 동작이 변경 되었습니까?

이 일을하기 때문에, 내가 select_cards(cards)을 실행할 때마다 그것은 단지 대신 16의 12 개 카드를 선택 그러나, 나는 window.resize_to 방법을 언급 할 때, 그것은 성공적으로 모두 16

어떤 생각이 왜 창 크기를 조정하는 것은이 발생할 것이다 잡고 행동 변화? 이 문제를 해결할 수있는 방법에 대한 의견이 있으십니까? 방법 select_cards(cards) 작품

코드 :

def select_cards(cards) 
    @browser.button(:class, 'add-cards').click 
    # this runs a generic search to return all cards 
    search_modal = @browser.div(:class, 'quick-search')  
    search_modal.button(:class, 'test-quick-search').click 

    results = @browser.div(:class, 'search-results') 

    # This #take() passes in how many cards to click on--as stated; 16 
    cards = results.divs(:class, 'card selectable') 
    cards.take(cards).each do |assets| 
     assets.click 
    end 
end 
+2

브라우저의 크기를 조정하지 않으면 1920x1080보다 크거나 작습니까? 응용 프로그램이 모든 유형의 반응 형 디자인 (예 : 창 크기에 따른 레이아웃 변경)을 가지고 있습니까? –

+0

@JustinKo, 일반 브라우저 창이 _smaller_보다 1920x1080이며 응답 성이 좋은 디자인이 있습니다 - 창이 축소되거나 확장 될 때 행당 카드 수가 변경됩니다 (즉, 일반 브라우저 창 실행시 4, 1920x1080 실행 => 6) – kmancusi

+0

재미있는 점은, 더 작은 윈도우가 문제가 될 것으로 예상했을 것입니다. 요소를 찾는 방법을 공유하면 도움이됩니다. 또한 두 가지 브라우저 크기에서 HTML을 확인하면 유용한 정보가 제공 될 수 있습니다. –

답변

0

단지 추측이다.

browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
0

나는 또한했습니다 :하지만 요소들이보기에 스크롤 (아니면 다른 DOM의이)하지 않을 때와 같은 (대신 크기 조정의) 페이지를 스크롤 할 수

시도 존재하지 않는 것이 가능하다 요소가 스크롤 뷰에 없을 때마다 유사한 문제가 발생합니다. 이 상황에서 나는 "watir-nokogiri"보석을 사용하여 html을 파싱 한 다음 캡처 된 요소에 대한 고유 한 식별자 인 경우 모든 요소를 ​​캡처하고 작업을 수행합니다. 당신의 상황에서 내가 이런 짓을 할 것이다 :

def select_cards(cards) 
    @browser.button(:class, 'add-cards').click 
    search_modal = @browser.div(:class, 'quick-search')  
    search_modal.button(:class, 'test-quick-search').click 

    # Parsing HTML into a variable and searching for the results inside the variable 
    doc = WatirNokogiri::Document.new(@browser.html) 
    results = doc.div(:class, 'search-results') 

    cards = results.divs(:class, 'card selectable') 

    cards.take(cards).each do |assets| 
    # Assuming that id is the unique identifier for the assets 
    @browser.element(:id => "#{assets.id}").click 
    end 
end 

참고 :이 내가 이런 상황에 대처하는 데 사용하는 일을 주위에 내가 캡처 된 HTML을 사용하여 브라우저와 상호 작용할 수있는 경우에만 작동합니다. 식별자가없는 경우 색인 또는 다른 방법으로 클릭하여 시도 할 수 있습니다. 이 라이브러리를 사용하면 스크롤보기가 아닌 경우에도 모든 요소를 ​​가져올 수 있습니다.

0

이상하게도, 나는 나를 위해 작동하는 것 같군 뭔가 발견이 Locating elements without a specific class name 그래서 난 다른 방법의 사용을 만들 수있는 사용 후
를, 내가 assets.fire_event ("onclick")
를 사용하여 내 루프를 변경 나는 코드의 소수를 통해 테스트 모든 요소를 ​​선택하는 데 문제가없는 경우