库中没有内置任何东西可以让你做你想做的事per se。但是,您可以创建自己的库来访问 selenium 功能。有两种方法可以实现这一点,这两种方法都需要在 python 中创建自己的库。这些方法用于子类化 Selenium2Library,或获取对 Selenium2Library 实例的引用。
创建一个继承 Selenium2Library 子类的自定义库
访问 Selenium2Library 内部的一种方法是编写一个继承自 Selenium2Library 的库类。当您这样做时,您可以访问原始库中的所有内容。然后,您可以返回对 WebDriver 对象的引用,或者您可以在 python 中编写自己的关键字。
例如,下面是一个自定义 selenium 库,它有一个新关键字,该关键字将返回当前的 WebDriver 实例。它通过调用私有(原始 Selenium2Library)方法来做到这一点_current_browser
。由于这是一个私有方法,因此不能保证它能够经受住时间的考验,但在我编写本文时它已经存在。
创建自定义硒库
首先,创建一个名为 CustomSeleniumLibrary.py 的新 python 文件。将其放在机器人可以找到的地方 - 最简单的方法是将其放在与要使用它的测试套件相同的文件夹中。将以下内容放入该文件中:
from Selenium2Library import Selenium2Library
# create new class that inherits from Selenium2Library
class CustomSeleniumLibrary(Selenium2Library):
# create a new keyword called "get webdriver instance"
def get_webdriver_instance(self):
return self._current_browser()
创建使用该库的测试用例
接下来,编写一个使用它而不是 Selenium2Library 的测试用例。例如:
*** Settings ***
| Library | CustomSeleniumLibrary.py
| Suite Teardown | close all browsers
*** Test Cases ***
| Example using custom selenium library
| | Open browser | http://www.example.com | browser=chrome
| | ${webdriver}= | Get webdriver instance
| | log | webdriver: ${webdriver}
运行测试
像运行任何其他测试一样运行该测试。完成后,您应该在日志中看到类似以下内容:
16:00:46.887 INFO webdriver: <selenium.webdriver.chrome.webdriver.WebDriver object at 0x10b849410>
在测试用例中使用该对象
神秘的...<selenium....WebDriver object...>
消息证明该变量实际上保存了对 python WebDriver 对象的引用。使用扩展变量语法 http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#extended-variable-syntax如果需要,您可以调用机器人的方法并访问该对象的属性。我不建议这样做,但我认为机器人支持它真的很有趣:
| | log | The page title is ${webdriver.title}
创建引用 Selenium2Library 的自定义库
实现此目的的第二种方法是使用机器人的方法来获取库的实例,此时您可以根据需要访问该对象。这在机器人用户指南中有记录;看从 Robot Framework 获取活动库实例 http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#getting-active-library-instance-from-robot-framework in the 机器人框架用户指南 http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html.
例如,上面示例中的 get_library_instance 关键字如下所示:
from robot.libraries.BuiltIn import BuiltIn
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('Selenium2Library')
return se2lib._current_browser()
请注意,在这种情况下,您必须同时包含 Selenium2Libraryand您的自定义库:
*** Settings ***
| Library | Selenium2Library
| Library | CustomSeleniumKeywords.py
| Suite Teardown | close all browsers
*** Test Cases ***
| Example using custom selenium keyword
| | Open browser | http://www.example.com | browser=chrome
| | ${webdriver}= | Get webdriver instance
| | log | webdriver: ${webdriver}