【问题标题】:How to use selenium webdriver methods inside robotframework library?如何在机器人框架库中使用 selenium webdriver 方法?
【发布时间】:2020-02-18 11:01:20
【问题描述】:

我想在机器人框架库中使用 selenium webdriver 方法。

def custom_go_to
        driver = BuiltIn().get_library_instance('SeleniumLibrary')
        driver.go_to(url)

自定义库中的上述代码工作正常,但我想在 robotsframework 内置库的位置使用 selenium 方法。 当我尝试使用 driver.get(url) 它说

'SeleniumLibrary' object has no attribute 'get'

我创建的自定义库 ERP.py 的样子

class ERP: 
   @keyword
    def custom_go_to(self, url):
        driver = BuiltIn().get_library_instance('SeleniumLibrary')
        driver.get(url)

测试用例看起来像

***Settings***
Library  SeleniumLibrary
Library  path_to_lib/ERP.py

*** Variable ***
${BROWSER}  |  chrome
${URL}  |  facebook.com

***Test Cases***
Open the browser using an inbuilt keyword and go to a given URL using custom go to using EventFiringWebDriver.
     Open Browser |  about:blank  |  ${BROWSER}
     Custom Go To  |   ${URL}

如何在机器人框架库中使用 Selenium webdriver 方法?

【问题讨论】:

  • 不知道您想在这里实现什么,但最新的SeleniumLibrary 没有Get 关键字...请使用现有关键字重试。
  • 我想使用robotframework 库中的所有Selenium 关键字。就像我们通常只在 Python 中使用 Selenium 时所做的那样。
  • 不过,SeleniumLibrary 中没有 Get 关键字...
  • 感谢您指出我,我刚刚更新了问题。我想使用 webdriver 方法。 :)
  • 这里有一个相当不错的 Python 和 webdriver 教程:selenium-python.readthedocs.io/…

标签: python selenium robotframework


【解决方案1】:

selenium 库本身不是 webdriver 对象,它只是 SeleniumLibrary 类的一个实例。您需要获取驱动程序的引用,这是库中的一个属性。

def custom_go_to(url):
    selib = BuiltIn().get_library_instance('SeleniumLibrary')
    selib.driver.get(url)

有关在低级别与 SeleniumLibrary 交互的更多信息,请参阅 SeleniumLibrary git 存储库中的文档 Extending SeleniumLibrary

【讨论】:

  • 谢谢布莱恩,这正是我想知道的。通过在 LibraryComponent 的帮助下创建插件,我实现了同样的目标。在插件中,我将它用作self.driver.get(url),它可以工作,但 self 不能与库一起工作,为什么?
  • @DivakshJain:我不知道您所说的“self 不适用于库”是什么意思。 self 在所有 python 代码中的工作方式相同。机器人关键字类或 selenium 没有什么独特之处可以使其工作方式不同。
  • 我现在明白了。再一次感谢你。 :)
【解决方案2】:

'SeleniumLibrary' 没有 get 属性。请参阅Selenium Library Robot Framework 了解更多信息。

你应该使用

Open Browser    ${LOGIN URL}    ${BROWSER}

以下是链接中的示例
示例

*** Settings ***
Documentation     Simple example using SeleniumLibrary.
Library           SeleniumLibrary

*** Variables ***
${LOGIN URL}      http://localhost:7272
${BROWSER}        Chrome

*** Test Cases ***
Valid Login
    Open Browser To Login Page


*** Keywords ***
Open Browser To Login Page
    Open Browser    ${LOGIN URL}    ${BROWSER}

【讨论】:

  • 这没有回答所提出的问题。使用自定义关键字而不是使用预先构建的关键字是有充分理由的。
【解决方案3】:

SeleniumLibrary 有一个“获取元素属性”关键字。

在此处查看文档: RobotFramework SeleniumLibrary Documentation

【讨论】:

    【解决方案4】:

    也转载了这个:

    driver.get(url) 产生AttributeError: 'SeleniumLibrary' object has no attribute 'get'

    现有关键字的错误,例如 driver.go_to(url) 会产生不同的错误:No browser is open.

    所以,使用现有的关键字或自己创建。

    【讨论】:

    • “所以,使用现有的关键字或自己制作。” - 这正是他们想要做的:制作自己的。
    • 是的,正是driver.get()的情况下。他们想要创建一个自定义关键字来调用driver.get()
    • 在这种情况下,driver.get() 不存在,因此,必须创建或更改为 get() 之外的另一个关键字,因此,“所以,使用现有关键字或自己创建关键字”。您可以创建一百万个自定义关键字,但这并不能使 driver.get() 工作。
    • 您误读了这个问题。 get 方法是浏览器驱动程序的标准方法。这就是他们想要的称呼。在问题中,他们错误地假设 SeleniumLibrary 的实例是驱动程序。不是。
    • 他们改变了一些措辞,但即使是原始版本的问题也表示他们想调用硒驱动程序的低级get方法。该方法存在,但它存在于 驱动程序 上,而不是 SeleniumLibrary 的实例上。
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 2018-04-19
    • 2022-11-01
    • 2018-02-12
    • 2020-01-25
    • 2023-03-18
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多