在ROBOT框架中从python模块调用特定方法

时间:2017-04-16 19:42:00

标签: python robotframework

我有一个包含2个类的Python模块。每个类都定义了一组函数或方法。我们如何从ROBOT框架中的类调用特定方法。我正在尝试下面的方法,它给出了以下错误。有人可以帮助我解决这里的问题。 Python模块和Robot文件在同一个路径中。我尝试将库语句更改为CheckCode.employee WITH_NAME xyz。这没有帮助。感谢。

ERRORS
==============

[ WARN ] Imported library '/homes/user/New/CheckCode.py' contains no keywords.
==============================================================================
CheckCode :: Checking small built in code                                     
==============================================================================
Verify we can call a particular class from a Python Module in Robot   | FAIL |
No keyword with name 'my_code.employee.staff info' found.
------------------------------------------------------------------------------
CheckCode :: Checking small built in code                             | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================


Python Module File output
******************************

import re
import collections
import math

class person():
    def __init__(self,first,last):
        self.firstname = first
        self.lastname = last

    def emp_name(self):
        return self.firstname + " " + self.lastname

class employee(person):
    def __init__(self,first,last,empId):
        person.__init__(self,first,last)
        self.staffId = empId

    def staff_info(self):
        return self.Name() + " " + self.staffId

ROBOT FILE 
******************************

*** Settings ***
Documentation    Checking small built in code
Library   BuiltIn
Library   Collections
Library   CheckCode.py     WITH NAME   my_code

*** Test Cases ***
Verify we can call a particular class from a Python Module in Robot
    Log     Hello World
    ${var} =    my_code.employee.staff info     Maggi       Nestle      20000


*** Keywords ***
Init
    Set Log Level    DEBUG

3 个答案:

答案 0 :(得分:5)

Robot不会自动创建库文件中的类实例,但有一个例外:如果名称与没有.py扩展名的文件名匹配,它将自动创建类的实例。例如,如果文件CheckCode.py定义了一个名为CheckCode的类,那么机器人将自动创建一个实例,并且使用该实例,它会将每个方法公开为关键字。

如果要在文件中创建某个类的实例,则必须创建一个执行该操作的关键字。例如:

# CheckCode.py
class person()
    ...
...
def create_person(first, last):
    return person(first, last)

然后您可以像这样使用它:

*** Settings ***
Library    CheckCode.py

*** Test Cases ***
Example
    ${person}=    create person    Maggi    Nestle
    Should be equal as strings    ${person.emp_name()}    Maggi Nestle

您还可以使用Call Method关键字调用对象上的方法:

${name}=    Call method    ${person}    emp_name

答案 1 :(得分:1)

听起来您可能正在使用物理路径导入库。要从同一模块导入两个库,必须按名称导入它们,如:

*** Settings ***
Library    CheckCode.person    firstname    lastname
Library    CheckCode.employee    firstname    lastname    someid

或动态:

Import Library    CheckCode.person    firstname    lastname
Import Library    CheckCode.employee    firstname    lastname    someid

为了像这样导入,你需要让你的模块在Python路径上。请参阅this section以获取相关帮助。

来自用户指南中的Using physical path to library

  

这种方法的局限性在于,作为Python类实现的库必须位于与该类同名的模块中。

答案 2 :(得分:0)

从ROBOT框架中的python模块调用特定方法

机器人文件

*** Settings ***

Library     Selenium2Library
Variables    hello.py

*** Test Cases ***

LoginTest
   Open Browser to the Login Page

*** Keywords ***

Open Browser to the Login Page
   ${var}=   call method    ${s}    brow
   ${SiteUrl}=  call method  ${s}   url
   open browser    ${SiteUrl}    ${var}
   Maximize Browser Window
   sleep   1s
   close browser

Python文件hello.py

class simple:
  def brow(self):
     return("Chrome")
  def url(self):
     return("https://www.google.com/")

s=simple()