在自定义测试库中捕获有关失败的屏幕截图

时间:2018-09-05 20:03:51

标签: python robotframework

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

不幸的是,我在SeleniumLibrary旁边有一些自定义库,我想做同样的事情,但事实并非如此。因此,例如,如果我从CustomLibrary1调用了一个关键字,而这样做却失败了, if(navigation.state.params && navigation.state.params.backRoute){ return { headerLeft: (<HeaderBackButton onPress={()=>navigation.navigate(navigation.state.params.backRoute)}/> ), headerRight: ( <TouchableOpacity onPress={()=>navigation.navigate(navigation.state.params.routeImGoingnext)}> <Text style={{paddingRight: 10}}> Skip </Text> </TouchableOpacity> ) } } 那么它只会在没有捕获屏幕截图的情况下通过测试。

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

  1. 将每个关键字正文放入self.selib.wait_until_page_contains("Hello")中并使用

try(不理想,因为我有数百个关键字)。

  1. 在我拥有的每个测试中添加一个测试摘要,并使用

except: self.selib.capture_page_screenshot(),这也不理想,因为如果在.robot文件中运行SeleniumLibrary关键字时测试失败,则将捕获两个屏幕截图,并且我有一些混合数据驱动/关键字驱动的测试不要在测试之间以及仅在所有测试结束时调用测试拆卸。

是否可以将“ run_on_failure”功能注册到自定义库中?

1 个答案:

答案 0 :(得分:0)

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