2013-05-10 3 views
0

짧은 이야기 : lettuce와 splinter를 사용하여 django app에 대한 기능 테스트를 작성하고 있습니다. 단계 호출에서 일부 동기화가 없어 시나리오가 실패합니다.lettuce + splinter와 django를 사용하여 기능 테스트 중 응답을 기다리십시오

질문 : 내 단계에 인공 대기 시간을 추가하지 않아도이 오류가 발생하지 않도록 할 수있는 방법이 있습니까?

긴 이야기 :. 시나리오 검사 기존 사용자가 로그인 할 수있는 경우

Scenario: User exists as admin 
    Given I access the url "/login/" 
    And The user "someuser" with password "something" exists as admin 
    When I fill username with "someuser" and password with "exists" 
    And I submit the form   
    Then I see the paragraph "You're successfully logged in!" 

여기에 중요한 단계이다 : 나는 상추 기능을 수확 할 때, 무작위로

@step(r'I see the paragraph "(.*)"') 
def see_paragraph(step, text): 
    assert text in world.browser.html 

실패합니다.

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/lettuce/core.py", line 143, in __call__ 
    ret = self.function(self.step, *args, **kw) 
    File "/vagrant/src/enext/apps/auth/features/authentication-steps.py", line 21, in see_paragraph 
    assert text in world.browser.html 
AssertionError 

디버깅을 시도 할 때마다 응답을 인쇄하면 매번 작동하므로 오류를 재현 할 수없는 것으로 나타났습니다. 일시 중지를 추가하는 것도 트릭을 수행하는 것 같습니다. 이 테스트 데이터베이스 플러시와 관련된 것처럼

@step(r'I see the paragraph "(.*)"') 
def see_paragraph(step, text): 
    # print world.browser.html.encode('utf-8') 
    # either the next or the previous line fixes it 
    time.sleep(0.3) 
    assert text in world.browser.html 

은 처음에는 보였지만, 나뿐만 아니라 다른 시나리오와 플러시를 제거하고이 일어나고 있었다.

+0

상추 없음 사랑입니까? 당분간 나는 적극적으로 기다릴 것입니다. 그러나 나는 여전히 이것에 관심이있다. 누구든지 새로운 것을 발견하면 – Felipe

답변

2

귀하의 And I submit the form에 따라 다를 수 있습니다. 이 단계가 "제출"버튼 또는 그와 비슷한 것을 클릭하면 문제가 시작되는 곳입니다.

Webdriver는 클릭 및 기타 "온 페이지"상호 작용을 제외한 모든 작업 후에 거의 페이지가로드 될 때까지 기다립니다. 클릭 한 후에는 응답을 기다리지 않고 즉시 요소의 유무를 찾습니다.

해결 방법 splinter docs에 설명 된대로 wait_time 인수를 사용하거나 지정된 제한 시간이 될 때까지 문을 확인하는 루프에 들어가는 자체 함수를 작성하는 것이 좋습니다.

P.S : 나는 또한 python selenium보고를 추천하며 wait(browser, timeout).until(some_statement)

+0

알려주세요. 제출 버튼을 클릭하면됩니다. 단계 정의는 다음을 수행합니다 :'world.browser.find_by_css ('input [type = "submit"]'). first.click()' – Felipe

+0

'browser.is_text_present ('text', wait_time = 0.3) ',하지만 이것은 기본적으로 이미 제가 한 것과 같습니다. 더 멋지게 쓰여졌다. – Felipe

+0

타임 아웃을 사용하면 항상 진술이 'True'인지 확인하기 때문에 'wait_time = 10'으로 설정해도 실제 시간에는 차이가 없습니다. 그러나이 경우 0.3 초 ​​대신 0.5 초가 걸리는 경우 테스트가 실패하지 않도록 보호합니다. – PukeCloud

관련 문제