2013-05-10 2 views
0

Рассказ: Я пишу функциональный тест для приложения django с использованием салата и осколка. Сценарий выходит из строя из-за отсутствия синхронизации при шаговых вызовах.Ждите ответа во время тестирования функции с использованием салата + splinter и django

Вопрос: Есть ли способ предотвратить эту ошибку, не добавляя искусственного времени ожидания на мой шаг?

Longer история:. проверяет сценарий, если существующий пользователь может войти в систему

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 ждет загрузки страницы почти после всех действий, кроме щелчков и других взаимодействий «onpage». Поэтому после щелчка он сразу ищет наличие элемента, не дожидаясь ответа.

В качестве решения я бы рекомендовал использовать аргумент wait_time, как описано в splinter docs, или написать свою собственную функцию, которая идет в цикле проверки оператора до указанного таймаута.

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,5 с вместо 0,3 с – PukeCloud

 Смежные вопросы

  • Нет связанных вопросов^_^