2013-11-26 3 views
1

저는 Selenium의 Ruby Bindinds 및 Test :: Unit을 사용하여 Ruby를 통해 Selenium을 사용하여 UI 상호 작용을 테스트하는 문제 단위 작업을하고 있습니다. 그 부분은 성공적 이었지만 나는 작동하지 못하는 테스트 케이스로 뛰어 들었다. 내가해야 할 일은 테이블에 테이블이로드 될 때까지 기다린 다음 sorting 클래스의 테이블 헤더를 클릭하고 테이블의 첫 번째 행을 기록한 다음 첫 번째 행의 포스트 클릭과 비교하는 것입니다. sorting 클래스가없는 헤더를 건너 뛰고 모든 정렬 가능한 헤더가 브라우저에서 작동하는지 확인합니다.셀레늄을 사용하여 UI 상호 작용 테스트 문제

이제 문제가 발생했습니다. 이 테스트는 Selenium에서 실시한 assert_nothing_raised 테스트가 실패하여 실패합니다. 어디에? 나는 모른다. [test_cases/tc_commodities.rb:6]을 참조하지만 행 6은 assert_nothing_raised do입니다. 테스트는 그로부터 시작하기 때문에 많은 정보가 아닙니다. 그런 다음 코드를 제거하여 코드에서 범위를 좁히기 시작했습니다. 문제는 wait.until 블록을 의미하는 columns.each 루프에 있습니다. 시간 초과 기간 동안 페이지에 표시된 헤더를 볼 수 있기 때문에 그건 이해가되지 않습니다. 페이지가 닫히고 테스트가 실패합니다. 테스트를 다시 실행하고 실행을 중단하고 DOM을 살펴 보았습니다. 모든 올바른 요소가 거기에 있었고 표시되었습니다. 스크립트에는 데리러 갈 시간이 충분했습니다. 내가 sleep 15에 넣었는지 확인하십시오. 헤더가 표시되기를 기다리는 동안 시간이 초과되었습니다.

  1. 왜이 시간이 초과 되었습니까? .displayed에 대해 true를 반환하지 않는 페이지의 표시된 항목에 문제가 없었습니다.

  2. 이 테스트 케이스에 가장 적합한 방법인가요? 누구든지 더 나은 해결책을 제안 할 수 있습니까?

테스트 출력을 실패

$ ruby test_cases/tc_commodities.rb 
Run options: 

# Running tests: 

Column Found 
F 

Finished tests in 46.652411s, 0.0214 tests/s, 0.0214 assertions/s. 

    1) Failure: 
test__sort_columns_on_stories_table(TestCommodities) [test_cases/tc_commodities. 
rb:6]: 
Exception raised: 
<#<Selenium::WebDriver::Error::TimeOutError: timed out after 10 seconds>>. 

1 tests, 1 assertions, 1 failures, 0 errors, 0 skips 

셀레늄 코드

def test__sort_columns_on_stories_table 
    assert_nothing_raised do 
     @browser.get 'some url' 
     @wait.until do 
      @browser.find_element(:css, "#dataTable tbody tr:nth-child(2)").displayed? 
     end 

     columns = @browser.find_elements(:css, "#dataTable thead th.sorting") 

     columns.each do |column| 
      puts "Column Found" 

      @wait.until do 
       column.displayed?     
      end 

      puts "Column Displayed" 

      first_story_before = @browser.find_element(:css, "#dataTable tbody tr:nth-child(1)").attribute('id') 
      column.click 
      first_story_after = @browser.find_element(:css, "#dataTable tbody tr:nth-child(1)").attribute('id') 

      assert_not_equal(first_story_after, first_story_before) 
     end 
    end 
end 

편집 내가 크롬과 전나무를 사용하고

efox 웹 드라이버. 둘 다 같은 문제가 있습니다. column.displayed?에 대한 wait.until을 제거 할 수는 있지만 분명히 페이지에 표시되지 않는다는 오류가 발생합니다.

답변

0

또한 페이지로드가 지연 될 때까지 예외 TimeTime out과 비슷한 문제가 발생합니다. 그러나 페이지가 완전히로드되었습니다.

어떤 브라우저를 사용하고 있습니까? 해당 IE, IEDriverServer 버전은 무엇입니까?

+0

사용중인 브라우저를 알려주시겠습니까? IE의 경우 IEDriverServer의 버전은 무엇입니까? – user2680325

+0

크롬 및 Firefox 웹 드라이버를 사용하고 있습니다. 둘 다 같은 문제가 있습니다. 'column.displayed? '에 대한'wait.until'을 제거 할 수 있지만, 분명히있을 때 페이지에 표시되지 않는다는 오류가 발생할 때. – Kylee