在机器人框架中使用库实例

时间:2018-04-09 11:34:18

标签: selenium robotframework

对框架不熟悉,如果我使用'获取库实例'创建关键字,我无法理解其中的区别。在RF中。请用示例或任何参考文档进行解释。这对我来说有点混乱。

我已经访问过:BuiltIn.Get Library Instance

编辑: 参考上面的链接,我可以看到自定义方法使用" BuiltIn.Get Library Instance"在页面上找到标题。所以,如果我使用Get Title使用title_should_start_with具有相同功能在Robot Framework中编写自己的关键字,或者使用继承解释1) here和{{3 }}


1)使用继承

from SeleniumLibrary import SeleniumLibrary
class ExtendedSeleniumLibrary(SeleniumLibrary):
def title_should_start_with(self, expected):
        title = self.get_title()
        if not title.startswith(expected):
            raise AssertionError("Title '%s' did not start with '%s'"
                                 % (title, expected))

2)使用get_library_instance

from robot.libraries.BuiltIn import BuiltIn
def title_should_start_with(expected):
    seleniumlib = BuiltIn().get_library_instance('SeleniumLibrary')
    title = seleniumlib.get_title()
    if not title.startswith(expected):
        raise AssertionError("Title '%s' did not start with '%s'"
                             % (title, expected))

3)RF关键字

*** Settings ***
Library    SeleniumLibrary
*** keywords ***
Verify Title
    ${title}  Get Title
    .
    .

3 个答案:

答案 0 :(得分:0)

这看起来更像是一个设计问题,而不是实现。 答案在于模块化和可重复使用设计的概念。 如果已经可用,请不要重新发明。

“BuiltIn.Get Library Instance”文档中引用的示例可能过于简单,但如果您使用RF并希望获取页面标题,为什么不重用SeleniumLibrary提供的API?

答案 1 :(得分:0)

同样的问题发布在Robot Framework用户组中,我可以从那里找到答案:https://groups.google.com/forum/#!msg/robotframework-users/Ui3lWPMu8pI/l7hGeb1QBAAJ

答案 2 :(得分:0)

如果继承,代码可以独立运行而无需机器人框架(这假设SeleniumLibrary不需要机器人框架)。

如果是 get_library_instance ,我们可以在模块中使用SeleniumLibrary的相同实例。这意味着我们可以使用机器人框架执行前提条件(比如打开浏览器),然后调用我们的关键字,该关键字在SeleniumLibrary首次实例化时检索由robot-framework创建的实例。此外,代码仅在机器人框架调用时才有效,因为它需要执行上下文。
示例here解释了"继承"的使用和"实例"。请从头到尾阅读。

而且,真正的发现是,它更依赖于我们希望我们的库如何工作。如果我们想以这样的方式创建我们自己的库,使关键字不与SeleniumLibrary冲突,那么可以通过获取SeleniumLibrary实例轻松完成。
如果我们希望关键字直接是库关键字,或者希望它们更像是基于库关键字的用户关键字,则必须做出决定。一旦有点清楚,那么它将导致实现细节,例如使用继承或获取活动库实例。

合并回复。 Reference