【问题标题】:Calling a method which is inside a class in python from a robot file从机器人文件中调用 python 类中的方法
【发布时间】:2018-06-16 12:25:03
【问题描述】:

我有一个python类,文件名是one.py

class one:
   def __init__(self,dict1,connect=False):
       self.device=dict1['device']
       self.ip=dict1['ip']
       self.uname=dict1['uname']
       self.password=dict1['password']
       self.dict1={'device':self.device, 'ip':self.ip,'uname':self.uname,self.password:self.password}
       self.is_connect=False
       self.is_config_mode=False
       if connect:
         self.connects_to()
   def connects_to(self):
       netconn=ConnectionHandler(self.dict1)
       print "stuff"

我需要从机器人文件中调用函数connects_to。

*** Settings ***
Library LibFiles/one.py
Library OperatingSystem
Library String
Library Collections
*** Keywords ***
Test_1 ${equip1}
${dict1}= Create Drictionary device=auto1 ip:192.38.19.20 secret=${EMPTY} uname=Adrija password=Hello port=22
${a}= connects_to ${dict1} connect=${True}

但我得到的错误是方法 connected_to() 不存在。 请帮忙。

谢谢。

【问题讨论】:

  • 请包括错误的确切措辞。它准确地告诉你问题是什么。仔细阅读,从字面上理解。

标签: python-3.x robotframework


【解决方案1】:

上面的机器人脚本缺少分隔参数的双空格。我假设这是一个格式问题,而不是整体问题的一部分。我还将ip:192.. 更改为ip=192.. 并将关键字调用connects_to 更改为Connects To

在 Python 库中定义了两个方法:initconnect_to。在 Robot Framework 中,这两个方法映射到以下事件:加载库 Library /LibFiles/one.py 和调用关键字 connect to

主要问题是,当您加载库时,您没有指定所需的变量。在下面的机器人示例中,我在 variables 部分中指定变量,然后在 settings 部分中使用这些变量。

*** Settings ***
Library  one    ${dict1}    connect=${True}

*** Variables ***
&{dict1}    device=auto1  ip=192.38.19.20  secret=${EMPTY}  uname=Adrija  password=Hello port=22

如果您不想在加载时建立连接,但在连接时,则需要在 Connects To 关键字中指定代码和变量。下面是修改后的代码。

one.py

class one(object):

    ROBOT_LIBRARY_VERSION = 1.0

    def __init__(self):
       pass

    def connects_to(self, dict1=False, connect=False):
       self.device=dict1['device']
       self.ip=dict1['ip']
       self.uname=dict1['uname']
       self.password=dict1['password']
       self.dict1={'device':self.device, 'ip':self.ip,'uname':self.uname,self.password:self.password}
       self.is_connect=False
       self.is_config_mode=False

       # netconn=ConnectionHandler(self.dict1)
       print "stuff"

机器人脚本

*** Settings ***
Library  one
Library  Collections

*** Test Cases ***
Test_1
    ${dict1}=  Create Dictionary  device=auto1  ip=192.38.19.20  secret=${EMPTY}  uname=Adrija  password=Hello port=22
    ${a}=  Connects To  ${dict1}  connect=${True}

Test_2
    ${one}    Get Library Instance    one
    ${one.ip}    Set Variable    123.123.123.123
    ${test}    Set Variable    ${one.ip}
    Log To Console    ${test}  

需要注意的是,某些编辑器在预加载库以进行关键字发现时可能会出现问题。它们通常加载库而不将任何变量传递给init 方法,因此会导致错误。只需允许默认值并检查这些值即可解决该问题。

编辑:添加了第二个将值直接关联到 Python 对象变量的示例。

【讨论】:

  • 嗨@A。 Kootstra,感谢您的帮助。但是我有一个问题,dict1 vlaues 已经在 init 函数中声明了,是否必须在机器人文件中再次定义?或者有没有办法直接从python调用dict1。谢谢。
  • 这是可能的,请参阅第二个示例的更新答案。但是,出于可维护性的原因,我建议不要这样做。如果您要直接从机器人脚本更新 Python 变量,那么当您更改 Python 代码时,您的机器人代码也需要更改。通过使用更新变量的方法,您可以更轻松地进行这些更改,同时降低整体影响。
  • 嗨@A.Kootstra,我有一个问题。因此,如果我需要创建一个类的实例,有没有一种方法可以使用该类的实例调用后续函数。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2016-01-20
  • 2022-11-01
  • 1970-01-01
  • 2021-10-19
  • 2017-12-19
  • 2013-07-10
相关资源
最近更新 更多