<p>图书馆里没有任何东西可以让你做自己想做的事。但是,您可以创建自己的库来访问selenium特性。有两种方法可以实现这一点,这两种方法都需要用python创建自己的库。这些方法是要将Selenium2Library子类化,或者获取对Selenium2Library实例的引用。</p>
<h2>创建一个Selenium2Library子类的自定义库</h2>
<p>访问Selenium2Library内部的一种方法是编写继承自Selenium2Library的库类。当你这样做时,你可以访问原始库中的所有内容。然后,您可以返回对WebDriver对象的引用,也可以用python编写自己的关键字。</p>
<p>例如,这里有一个自定义的selenium库,它有一个新的关键字,该关键字将返回当前的WebDriver实例。它通过调用private(到原始的Selenium2Library)方法<code>_current_browser</code>来实现这一点。因为这是一个私有方法,所以不能保证它能经受住时间的考验,但是在我写这篇文章的时候,它是存在的。</p>
<h3>创建自定义硒库</h3>
<p>首先,创建一个名为CustomSeleniumLibrary.py的新python文件。把它放在robot可以找到的地方——最简单的方法就是把它放在一个将要使用它的测试套件的同一个文件夹中。将以下内容放入该文件:</p>
<pre><code>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()
</code></pre>
<h3>创建使用库</h3>的测试用例
<p>接下来,编写一个使用这个库而不是selenium2库的测试用例。例如:</p>
<pre><code>*** 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}
</code></pre>
<h3>运行测试</h3>
<p>像运行任何其他测试一样运行测试。完成后,您应该会在日志中看到类似的内容:</p>
<pre><code>16:00:46.887 INFO webdriver: <selenium.webdriver.chrome.webdriver.WebDriver object at 0x10b849410>
</code></pre>
<h3>在测试用例中使用对象</h3>
<p>神秘的<code>...<selenium....WebDriver object...></code>消息证明该变量实际上保存了对python WebDriver对象的引用。使用robot的<a href="http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#extended-variable-syntax" rel="noreferrer">extended variable syntax</a>可以调用方法并访问该对象上的属性(如果需要)。我不建议这样做,但我认为机器人支持它真的很有趣:</p>
<pre><code>| | log | The page title is ${webdriver.title}
</code></pre>
<h2>创建引用selenium2库的自定义库</h2>
<p>实现这一点的第二种方法是使用robot的方法来获取库的实例,此时您可以根据需要访问对象。这在robot用户指南中有记录;请参见<a href="http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html" rel="noreferrer">Robot Framework User's Guide</a>中的<a href="http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#getting-active-library-instance-from-robot-framework" rel="noreferrer">Getting active library instance from Robot Framework</a>。</p>
<p>例如,上面示例中的get_library_instance关键字如下所示:</p>
<pre><code>from robot.libraries.BuiltIn import BuiltIn
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('Selenium2Library')
return se2lib._current_browser()
</code></pre>
<p>注意,在这种情况下,您必须同时包含selenium2库<em>和</em>自定义库:</p>
<pre><code>*** 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}
</code></pre>