将现有 Webdriver 对象传递给 Robot Framework 的自定义 Python 库

2024-02-22

我正在尝试为 Robot Framework 创建自定义 Python 库,但我对 Python 和 Robot 很陌生,并且不确定如何完成我想要做的事情。我想将 Robot 使用 Selenium2Library 创建的 Webdriver 对象传递给我的自定义 Python 库,以便我可以使用 Webdriver 的方法,例如find_element_by_id。我看到了一些关于如何做的建议here https://stackoverflow.com/questions/18220386/robotframework-selenium2library-and-external-libraries-pass-webdriver and here https://groups.google.com/forum/#!topic/robotframework-users/rayouGl1YC8,但它们是针对 Java 库的 - 我找不到任何 Python 指令。

我将如何在 Python 中做到这一点?或者我想以不同的方式执行此操作,而不传递 Webdriver 对象?


库中没有内置任何东西可以让你做你想做的事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}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将现有 Webdriver 对象传递给 Robot Framework 的自定义 Python 库 的相关文章

  • QSortFilterProxyModel + QAbstractItemModel modelIndex.internalPointer() 导致崩溃

    我在 PyQt 4 8 Python 2 7 中实现了自己的 QAbstractItemModel class FriendListModel QtCore QAbstractItemModel def init self groups c
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 使用 Flask SQLAlchemy 进行表(模型)继承

    我遵循了这个建议question https stackoverflow com questions 1337095 sqlalchemy inheritance但我仍然收到此错误 sqlalchemy exc NoForeignKeysE
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 同情因子简单关系

    我在 sympy 中有一个简单的因式分解问题 无法解决 我在 sympy 处理相当复杂的积分方面取得了巨大成功 但我对一些简单的事情感到困惑 如何得到 phi 2 2 phi phi 0 phi 0 2 8 因式分解 phi phi 0 2
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • 超时时杀死或终止子进程?

    我想尽可能快地重复执行子进程 然而 有时这个过程会花费太长的时间 所以我想杀死它 我使用 signal signal 如下所示 ppid pipeexe pid signal signal signal SIGALRM stop handl
  • 如何在Python中获取绝对文件路径

    给定一条路径 例如 mydir myfile txt 如何在Python中找到文件的绝对路径 例如 在 Windows 上 我最终可能会得到 C example cwd mydir myfile txt gt gt gt import os
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • 从文档字符串生成 sphinx 文档不起作用

    我有一个具有以下结构的项目 我想保留 my project build here is where sphinx should dump into requirements txt make bat Makefile more config
  • 散景中的时间序列流

    我想在散景中绘制实时时间序列 我只想在每次更新时绘制新的数据点 我怎样才能做到这一点 散景网站上有一个动画情节的示例 但它每次都需要重新绘制整个图片 另外 我正在寻找一个简单的示例 我可以在其中逐点绘制时间序列的实时绘图 散景效果0 11
  • 如何在 Tkinter 的 Button 小部件中创建多个标签?

    我想知道如何在 Tkinter 中创建具有多个标签的按钮小部件 如下图所示 带有子标签的按钮 https i stack imgur com jOZRw jpg正如您所看到的 在某些按钮中有一个子标签 例如按钮 X 有另一个小标签 A 我试
  • 从 subprocess.Popen 获取整个输出

    我通过调用 subprocess Popen 得到了一个有点奇怪的结果 我怀疑这与我对 Python 的陌生有很大关系 args cscript USERPROFILE tools jslint js USERPROFILE tools j
  • 升级后 pip 损坏

    我做了 pip install U easyinstall 然后 pip install U pip 来升级我的 pip 但是 当我尝试使用 pip 时 我现在收到此错误 root d8fb98fc3a66 which pip usr lo
  • 在没有numpy的情况下在python中分配变量NaN

    大多数语言都有一个 NaN 常量 您可以使用它为变量分配值 NaN python 可以在不使用 numpy 的情况下做到这一点吗 是的 使用math nan https docs python org 3 library math html
  • 使用Python的timeit获取“全局名称'foo'未定义”

    我想知道执行一条Python语句需要多少时间 所以我上网查了一下 发现标准库提供了一个名为timeit http docs python org library timeit html旨在做到这一点 import timeit def fo
  • 将笔记本生成的 HTML 片段转换为 LaTeX 和 PDF

    在我的笔记本里有时会有 from IPython display import display HTML display HTML h3 The s is important h3 question of the day 但当我后来将笔记本

随机推荐