当前位置: 首页 > 面试题库 >

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

邵劲
2023-03-14
问题内容

我正在尝试为Robot
Framework创建一个自定义的Python库,但是我是Python和Robot的新手,所以我不确定如何完成我想做的事情。我想将Robot使用Selenium2Library创建的Webdriver对象传递给我的自定义Python库,以便可以使用Webdriver的方法,例如find_element_by_id。我在这里和这里已经看到了一些有关如何做的建议,但它们是针对Java库的-我找不到任何Python指令。

我将如何在Python中执行此操作?还是我想以其他方式执行此操作而不传递Webdriver对象?


问题答案:

没有什么内置到库,让你做你想做的 本身
。但是,您可以创建自己的可以访问硒功能的库。有两种方法可以做到这一点,这两种方法都需要在python中创建自己的库。这些方法是要子类化Selenium2Library或获得对Selenium2Library实例的引用。

创建子类Selenium2Library的自定义库

访问Selenium2Library内部的一种方法是编写一个从Selenium2Library继承的库类。执行此操作后,您就可以访问原始库中的所有内容。然后,您可以返回对WebDriver对象的引用,也可以只用python编写自己的关键字。

例如,这是一个自定义的硒库,它具有一个新关键字,它将返回当前的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()

创建一个使用该库的测试用例

接下来,编写一个使用此示例而不是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}

运行测试

像运行其他任何测试一样运行测试。完成后,您应该在html" target="_blank">日志中看到以下内容:

16:00:46.887 INFO webdriver: <selenium.webdriver.chrome.webdriver.WebDriver object at 0x10b849410>

在测试用例中使用对象

隐秘的...<selenium....WebDriver object...>消息证明该变量实际上持有对python
WebDriver对象的引用。然后,使用机械手的扩展变量语法,您可以根据需要在该对象上调用方法和访问属性。我不建议这样做,但是我认为机器人支持它真的很有趣:

| | log | The page title is ${webdriver.title}

创建一个引用Selenium2Library的自定义库

实现此目的的第二种方法是使用机器人获取库实例的方法,此时,您可以根据需要访问对象。机器人用户指南中对此进行了说明。请参见《机器人框架用户指南》中的从机器人框架获取活动库实例

例如,上例中的get_library_instance关键字如下所示:

from robot.libraries.BuiltIn import BuiltIn

def get_webdriver_instance():
    se2lib = BuiltIn().get_library_instance('Selenium2Library')
    return se2lib._current_browser()

请注意,在这种情况下,您必须同时包含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}


 类似资料:
  • 项目配置为使用多个MongoTemplate Mongo Ref传递为 问题:我需要访问MongoTemplate,它是类似的标准存储库。 例如,如果正在将接口扩展为 MyRepoCustomImpl 问题:相反,难道没有任何方法可以让要使用的MongoTemplate根据它扩展到的Repo自动注入或解析吗?

  • 问题内容: 我试图使用PendingIntent将自定义的序列化对象从我的IntentService传递到BroadcastReceiver。 这是我的自定义对象: 行.java 这是我的IntentService MyIntentService.java MainActivity.java 这是我的BroadcastReceiver: AlarmReceiver.java 最烦人的部分是该代码以

  • 问题内容: 我正在尝试将自己的自定义对象传递到包中: 我得到错误: 问题答案: 一种方法是让您的自定义对象实现Parcelable接口并使用

  • 问题内容: 我是否可以使用标准方法将自己的自定义对象添加到Map,然后将其正确编组到MapMessage中?当前,我收到无效对象类型消息。我注意到WebSphere有解决方案,但是我正在寻找不受特定AS约束的东西,如果没有这种方法,也许JBoss支持的东西会起作用。 如何在WebSphere中进行操作:http : //publib.boulder.ibm.com/infocenter/dmndh

  • 我是android编程的新手,我试图将自定义对象数组发送到不同的活动中。在第一个活动中,我有一个函数,它创建一个意图并向其中添加对象数组:

  • 我正在努力找出如何使用Java流从对象值等于x的自定义对象列表中收集自定义对象。 这没有编译,但我不认为我离得很远--有人能指出我在哪里出错吗?