代码之家  ›  专栏  ›  技术社区  ›  nik

在Robot框架中使用库实例

  •  0
  • nik  · 技术社区  · 6 年前

    作为该框架的新手,如果在RF中使用“Get Library Instance”创建关键字,我无法理解其中的区别。请举例说明或参考文件。这让我有点困惑。

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

    已编辑: 参考上面的链接,我可以看到定制方法使用“BuiltIn.Get Library Instance”来查找页面上的标题。那么,如果我在Robot框架中使用 Get Title 具有与相同的功能 title_should_start_with 或者使用前面解释的继承在python中编写相同的方法 1) here 2) here

    代码:
    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\u library\u实例

    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 回复  |  直到 6 年前
        1
  •  0
  •   Anshuman Manral    6 年前

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

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

        2
  •  0
  •   Tatu    6 年前

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

        3
  •  0
  •   nik    6 年前

    如果 遗产 代码可以独立运行,无需robot框架(假设SeleniumLibrary不需要robot框架)。

    如果 get\u library\u实例 我们可以在模块中使用相同的SeleniumLibrary实例。这意味着我们可以使用robot framework执行先决条件(如打开浏览器),然后调用关键字,检索SeleniumLibrary第一次实例化时robot framework创建的实例。此外,该代码只有在robot框架调用时才能工作,因为它需要其执行上下文。
    实例 here 解释“继承”和“实例”的用法。请从头到尾阅读。

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

    整合了回应。 Reference