机器人框架中的 Python - Se2Lib 没有属性“执行”

Posted

技术标签:

【中文标题】机器人框架中的 Python - Se2Lib 没有属性“执行”【英文标题】:Python in Robot framework - Se2Lib has no attribute 'execute' 【发布时间】:2017-07-05 09:12:57 【问题描述】:

在我的机器人框架测试中,我需要一些自定义 python 关键字(例如,按住 CTRL 键) 在我开始重构我的“大”自定义类之前,一切正常(但我并没有真正改变这部分中围绕按住 CTRL 的任何内容)。 现在我收到AttributeError: 'Selenium2Library' object has no attribute 'execute' 我的代码是:

class CustomSeleniumLibrary(object):
    def __init__(self):
        self.driver = None
        self.library = None

    def get_webdriver_instance(self):
        if self.library is None:
            self.library = BuiltIn().get_library_instance('Selenium2Library')
        return self.library

    def get_action_chain(self):
        if self.driver is None:
            self.driver = self.get_webdriver_instance()
            self.ac = ActionChains(self.driver)
        return self.ac

    def hold_ctrl(self):
        self.get_action_chain().key_down(Keys.LEFT_CONTROL)
        self.get_action_chain().perform()

然后我直接在机器人关键字中调用“hold ctrl”,关键字文件将我的自定义类导入为库(其他自定义关键字有效)... 知道为什么它在“执行”时失败了吗?

【问题讨论】:

请显示完整的错误。您发布的代码显示没有使用任何名为execute 的东西。另外,请修正你的缩进。 好吧,控制台中没有更多内容......只有“检查表 XY 中的所有值的数据......| FAIL | AttributeError:'Selenium2Library'对象没有属性'execute'”和是的,“执行”不在我的代码中,甚至不在“执行”或“key_down”等内部。我真的不知道这意味着什么...... 【参考方案1】:

问题出在 ActionChains 中,因为它需要 webdriver 实例,而不是 Se2Lib 实例。 Webdriver 实例可以通过调用_current_browser() 获得。我以这种方式对其进行了重新设计,并且可以正常工作:

def get_library_instance(self):
    if self.library is None:
        self.library = BuiltIn().get_library_instance('Selenium2Library')
    return self.library

def get_action_chain(self):
    if self.ac is None:
        self.ac = ActionChains(self.get_library_instance()._current_browser())
    return self.ac

def hold_ctrl(self):
    actionChain = self.get_action_chain()
    actionChain.key_down(Keys.LEFT_CONTROL)
    actionChain.perform()

【讨论】:

【参考方案2】:

这样的事情怎么样:

class CustomSeleniumLibrary(Selenium2Library):
    def __init__(self):
        super(CustomSeleniumLibrary, self).__init__()

    def _parent(self):
        return super(CustomSeleniumLibrary, self)

    def hold_ctrl(self):
        ActionChains(self._current_browser()).send_keys(Keys.LEFT_CONTROL).perform()

【讨论】:

那么,如果您想使用 S2L 方法在原始 Selenium2Library 之上的 CustomSeleniumLibrary 中创建另一个自定义关键字,只需调用 self._parent().s2l_method([args]) 谢谢,但是继承 Se2Lib 不是一种选择,因为我想将这个类分成几个并将它们包含在我的关键字中,并且使用继承会导致对 Se2Lib 函数的模糊调用。 啊。没错。

以上是关于机器人框架中的 Python - Se2Lib 没有属性“执行”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 的机器人框架,按键无需选择页面中的任何按钮或元素

python︱apple开源机器学习框架turicreate中的SFrame——新形态pd.DataFrame

从现有的 python 包创建机器人框架库

一周精选技术小文:Python 深度学习框架回顾;机器学习中的数学知识;52 个有用的机器学习与预测 API 盘点

「第61期」-机器学习-01-TensorFlow机器学习框架

机器人框架中的Chrome选项