Ana*_*ist 14 python robotframework selenium-webdriver
我正在尝试为Robot Framework创建一个自定义Python库,但我是Python和Robot的新手,我不知道如何完成我想要做的事情.我想将使用Selenium2Library创建的Robot的Webdriver对象传递给我的自定义Python库,以便我可以使用Webdriver的方法,例如find_element_by_id
.我已经看到了一些关于如何在这里和这里做的建议,但它们是针对Java库的 - 我找不到任何Python指令.
我将如何在Python中执行此操作?或者我想以不同方式执行此操作而不传递Webdriver对象?
Bry*_*ley 25
没有什么内置到库,让你做你想做的本身.但是,您可以创建自己的库来访问selenium功能.有两种方法可以实现这一点,这两种方法都需要在python中创建自己的库.这些方法是Selenium2Library的子类,或者是对Selenium2Library实例的引用.
访问Selenium2Library内部的一种方法是编写一个继承自Selenium2Library的库类.执行此操作后,您可以访问原始库中的所有内容.然后,您可以返回对WebDriver对象的引用,或者您可以在python中编写自己的关键字.
例如,这是一个自定义的selenium库,它有一个new关键字,它将返回当前的WebDriver实例.它通过调用private(到原始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()
Run Code Online (Sandbox Code Playgroud)
接下来,编写一个使用它而不是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}
Run Code Online (Sandbox Code Playgroud)
像进行任何其他测试一样运行测试.完成后,您应该在日志中看到类似的内容:
16:00:46.887 INFO webdriver: <selenium.webdriver.chrome.webdriver.WebDriver object at 0x10b849410>
Run Code Online (Sandbox Code Playgroud)
这个神秘的...<selenium....WebDriver object...>
消息证明变量实际上包含对python WebDriver对象的引用.使用机器人的扩展变量语法,您可以根据需要调用方法并访问该对象上的属性.我不建议这样做,但我认为机器人支持它真的很有趣:
| | log | The page title is ${webdriver.title}
Run Code Online (Sandbox Code Playgroud)
实现此目的的第二种方法是使用机器人获取库实例的方法,此时您可以根据需要访问该对象.这在机器人用户指南中有记录; 请参阅" Robot Framework用户指南"中的从Robot Framework获取活动库实例.
例如,上面示例中的get_library_instance关键字如下所示:
from robot.libraries.BuiltIn import BuiltIn
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('Selenium2Library')
return se2lib._current_browser()
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,您必须包含Selenium2Library 和自定义库:
*** 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}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13205 次 |
最近记录: |