【问题标题】:Capturing Screenshot on failure in custom test library在自定义测试库中捕获失败的屏幕截图
【发布时间】:2018-09-06 04:41:00
【问题描述】:

我目前正在使用 ROBOT 进行一些自动化测试,但遇到了问题。 .robot 文件中使用 SeleniumLibrary 关键字失败的任何内容都会按预期准确捕获屏幕截图。

不幸的是,我在 SeleniumLibrary 旁边有一些自定义库,我想做同样的事情,但它没有。因此,例如,如果我从我的 CustomLibrary1 调用关键字,但它无法执行 self.selib.wait_until_page_contains("Hello") 那么它只会在不捕获屏幕截图的情况下使测试失败。

到目前为止,我能找到的唯一解决方法是:

  1. 将每个关键字正文放入try 并使用

except: self.selib.capture_page_screenshot()(不理想,因为我有数百个关键字)。

  1. 为我拥有的每个测试添加测试拆解,并使用

Run Keyword If Test Failed Capture Test Screenshot,这也不理想,因为如果在 .robot 文件中运行 SeleniumLibrary 关键字时测试失败,那么将捕获两个屏幕截图,并且我有一些混合数据驱动/关键字驱动测试不调用测试之间的测试拆解,仅在所有测试结束时进行。

有没有办法将“run_on_failure”功能注册到自定义库中?

【问题讨论】:

  • 您可以尝试创建一个侦听器,该侦听器将检查该侦听器将在每个关键字的末尾运行,以及关键字是否来自您的库并且失败而不是处理它。 robotframework.org/robotframework/latest/…

标签: python robotframework


【解决方案1】:

即使您有数百个关键字,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,一个非常有用的模块。

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多