Robot Framework:如何从SeleniumLibrary访问driver类属性
如何在Robot Framework中访问SeleniumLibrary的driver属性?
我要实现自定义函数,需要访问SeleniumLibrary里用@property装饰器定义的driver属性(代码如下)。已经用Open Browser命令创建了别名为Test的webdriver,但用多种Robot脚本命令访问driver都失败,报错:"Evaluating expression 'SeleniumLibrary.driver' failed: AttributeError: module 'SeleniumLibrary' has no attribute 'driver'"
SeleniumLibrary中driver属性的定义代码:
class SeleniumLibrary(DynamicCore): ROBOT_LIBRARY_SCOPE = "GLOBAL" ROBOT_LIBRARY_VERSION = __version__ @property def driver(self) -> WebDriver: """Current active driver. :rtype: selenium.webdriver.remote.webdriver.WebDriver :raises SeleniumLibrary.errors.NoOpenBrowser: If browser is not open. """ if not self._drivers.current: raise NoOpenBrowser("No browser is open.") return self._drivers.current
已执行的Open Browser命令:
Open Browser url=${url} browser=${browser} alias=Test options=${options} executable_path=${driverPath}
尝试过的访问命令:
Log ${SeleniumLibrary.driver}${driver}= SeleniumLibrary.driver${driver}= Evaluate SeleniumLibrary.driver
解决方法
出错的核心原因是直接访问了SeleniumLibrary模块,而非实例化后的库对象。driver是类的实例属性(通过@property定义),必须通过已加载的SeleniumLibrary实例来访问,而不是模块本身。
正确的访问方式:
- 无自定义库别名的场景:
直接获取库实例后访问driver属性:
${driver}= Get Library Instance SeleniumLibrary Log ${driver.driver}
- 存在浏览器别名的场景(如你的Test别名):
先切换到目标别名的浏览器,再获取实例访问driver:
Switch Browser alias=Test ${selenium_lib}= Get Library Instance SeleniumLibrary ${driver}= Set Variable ${selenium_lib.driver} Log ${driver}
也可以结合Evaluate关键字实现:
${selenium_lib}= Get Library Instance SeleniumLibrary ${driver}= Evaluate ${selenium_lib}.driver
关键说明:
Get Library Instance是获取已加载的SeleniumLibrary实例的核心关键字,这是访问实例属性的前提。- 当存在多个浏览器实例时,必须先用
Switch Browser切换到目标别名,确保driver属性返回的是你需要的那个浏览器对象。
内容的提问来源于stack exchange,提问作者Hemendra
相关产品推荐
相关产品推荐

