我有一个包含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
答案 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()