Снимок экрана при сбое в библиотеке пользовательских тестов - PullRequest
0 голосов
/ 05 сентября 2018

В настоящее время я использую ROBOT для некоторого автоматизированного тестирования, но я столкнулся с проблемой. Все, что не удается в файле .robot с помощью ключевого слова SeleniumLibrary, точно делает снимки экрана, как и ожидалось.

К сожалению, у меня есть несколько пользовательских библиотек наряду с SeleniumLibrary, которые я хотел бы сделать то же самое, но это не так. Так что если я вызываю ключевое слово из моего CustomLibrary1, например, и он не может сделать self.selib.wait_until_page_contains("Hello") тогда он просто не пройдет тест, не сделав снимок экрана.

Единственные обходные пути, которые мне удалось найти, это:

  1. Бросив все ключевые слова в try и используя

except: self.selib.capture_page_screenshot() (не идеально, так как у меня сотни ключевых слов).

  1. Добавление теста Teardown к каждому моему тесту и использование

Run Keyword If Test Failed Capture Test Screenshot, что также не является идеальным, поскольку, если тест не пройден при запуске ключевого слова SeleniumLibrary в файле .robot, будут получены два снимка экрана, и у меня есть несколько гибридных тестов, управляемых данными или ключевыми словами, которые не вызывают разрыв теста между тестами и только в конце всех тестов.

Есть ли способ зарегистрировать функцию "run_on_failure" в пользовательских библиотеках?

1 Ответ

0 голосов
/ 05 сентября 2018

Даже если у вас сотни ключевых слов, блок try - лучший способ сделать это.

Может быть, вы могли бы справиться так:

keywords = ['Hello', 'World'] # etc.

# Include the try block in a function.
def try_keyword(keyword):
    try:
        self.selib.wait_until_page_contains(keyword)
    except:
        self.selib.capture_page_screenshot()
    # Eventually do_something_else()

# Pass a function as an argument
def try_function_and_keyword(function, keyword):
    try:
        function(keyword)
    except:
        self.selib.capture_page_screenshot()
    # Eventually do_something_else()

for keyword in keywords:
    try_keyword(keyword)
    try_function_and_keyword(driver.find_element_by_id, keyword)

Я предполагаю, что возможные исключения касаются вашего сценария.

Если это так, возможно, использование модуля logging может быть полезным. Или, даже если возможные исключения касаются сайта, вам могут потребоваться данные запроса или ответа. Вы можете взглянуть на browsermob-proxy , действительно полезный модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...