关键字'捕获页面截图'无法在失败时运行:无法访问执行上下文

时间:2017-09-24 13:24:08

标签: python selenium selenium-webdriver robotframework selenium2library

如何在程序中访问执行上下文以捕获屏幕截图? 由于包含文本不存在,以下程序将失败。

from ExtendedSelenium2Library import ExtendedSelenium2Library
import logging

class firsttest():


    def googleit(self):
        self.use_url = 'https://google.ca'
        self.use_browser = 'chrome'

        s2l = ExtendedSelenium2Library()
        s2l.open_browser(self.use_url, self.use_browser)
        s2l.maximize_browser_window()

        try:
            # Should fail
            s2l.page_should_contain('this text does not exist on page')
        except:
            logger.debug('failed')


runit = firsttest()
runit.googleit()

当我运行此程序时会收到警告

WARNING - Keyword 'Capture Page Screenshot' could not be run on failure: Cannot access execution context

2 个答案:

答案 0 :(得分:3)

你必须使用机器人来执行测试,你不能只是实例化类并期望它们工作。它们仅在机器人运行时才能工作。

如果你需要在python中编写测试,则不需要使用ExtendedSeleniumLilbrary,你可以直接从python调用selenium API。

答案 1 :(得分:0)

问题可能源于您没有以正确的Robot Framework格式编写python库。

以下是在Robot Framework中编写Python代码的正确格式:

from robot.libraries.BuiltIn import BuiltIn

class ClickAnElement(object):
    def __init__(self):
        self.selenium_lib = BuiltIn().get_library_instance('ExtendedSelenium2Library')

    def click_an_element(self, locator):
        BuiltIn().click_element(locator)

这是如何工作的(我相信)在Robot Framework中,您使用*** Settings ***Library ClickAnElement.py部分中调用此库。这会激活__init__功能。然后,您可以像Selenium2Library中的关键字一样调用关键字。因此,如果我以正确的格式重新编写您发布的代码,它将如下所示:

from robot.libraries.BuiltIn import BuiltIn
import logging

class FirstTest():
    def __init__(self):
        self.selenium_lib = BuiltIn().get_library_instance('ExtendedSelenium2Library')

    def google_it(self):
        self.use_url = 'https://google.ca'
        self.use_browser = 'chrome'
        s2l = ExtendedSelenium2Library()
        s2l.open_browser(self.use_url, self.use_browser)
        s2l.maximize_browser_window()
        try:
            # Should fail
            s2l.page_should_contain('this text does not exist on page')
        except:
            logger.debug('failed')

然后,我的.robot文件看起来像这样:

*** Settings ***
Library     FirstTest

*** Test Cases ***
Test Google It
    Google It

您正在编写一个Python文件,以便在Robot Framework的外部工作。如果您希望它在Robot Framework的内部工作,则需要使用正确的库格式。

请注意,我只是格式化您的代码,而不是对其进行测试。我不能,因为我没有你的应用程序来测试它。