对框架不熟悉,如果我使用'获取库实例'创建关键字,我无法理解其中的区别。在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
.
.
答案 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