You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Robot Framework测试用例间实例变量(self)未保存的原因咨询

问题根源分析

你遇到的问题核心在于 Robot Framework的库实例生命周期:默认情况下,Robot会为每个测试用例创建一个全新的库对象实例。

第一个测试用例Open Browser to mypage.com调用Open My Page时,初始化了当前MySite实例的self.pages属性;但第二个测试用例Close Browser执行时,Robot会创建一个完全新的MySite实例——这个新实例根本没有执行过Open My Page,自然不存在pages属性,所以抛出AttributeError。

解决方案

下面提供几种实用的解决思路,按推荐程度排序:

1. 将MySite库改为单例模式(推荐)

让整个测试套件共享同一个MySite实例,这样所有测试用例的操作都基于同一个对象,属性自然会被保留。修改你的MySite类代码,添加单例逻辑:

class MySite(object):
    # 类变量保存唯一实例
    _singleton_instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._singleton_instance:
            cls._singleton_instance = super().__new__(cls, *args, **kwargs)
            # 初始化实例属性(避免未定义的问题)
            cls._singleton_instance._driver = None
            cls._singleton_instance.pages = None
        return cls._singleton_instance

    # 原有的@property、@driver.setter、close_all_windows、open_my_page方法保持不变

修改后,不管多少个测试用例,都会复用同一个MySite实例,第二个测试用例调用Close All Windows时,就能访问到第一个用例初始化的pages属性了。

2. 使用Suite Setup/Teardown(更符合RF最佳实践)

如果你的测试套件内所有用例都需要共享同一个浏览器会话,推荐把浏览器的打开和关闭放在套件级别的Setup和Teardown中,这样整个套件只执行一次打开/关闭,从根源避免实例问题。修改你的Robot脚本:

*** Settings ***
Library  MySite.py
# 套件启动时打开浏览器
Suite Setup    Open My Page
# 套件结束时关闭所有窗口
Suite Teardown    Close All Windows

*** Test Case ***
First Test Case
    # 这里写你的测试步骤,比如操作首页元素
Second Test Case
    # 另一个测试步骤,共享同一个浏览器会话

这种方式更贴合Robot Framework的设计理念,也能让测试结构更清晰。

3. 用全局变量传递库实例(应急方案)

如果不想修改Python库代码,也可以在第一个测试用例中把MySite实例存入全局变量,第二个用例取出使用:

*** Settings ***
Library  MySite.py

*** Test Case ***
Open Browser to mypage.com
    Open My Page
    # 获取当前库实例并保存为套件全局变量
    ${mysite_instance}=    Get Library Instance    MySite.py
    Set Suite Variable    ${GLOBAL_MYSITE}    ${mysite_instance}

Close Browser
    # 取出全局变量中的实例并调用方法
    ${GLOBAL_MYSITE}.Close All Windows

不过这种方式相对繁琐,只适合临时场景。

小细节提醒

你的Open My Page方法里有个小错误:self.driver.get(www.mypage.com)中的www.mypage.com没有加引号,会被Python当作变量而非字符串,运行时会报NameError,记得改成:

self.driver.get("www.mypage.com")

内容的提问来源于stack exchange,提问作者Onibas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:05:03