2017-04-16 10 views
2

私は2つのクラスを持つPythonモジュールを持っています。各クラスには、一連の関数またはメソッドが定義されています。どのようにROBOTフレームワークのクラスから特定のメソッドを呼び出すことができますか?私は、しかし、以下のエラーを与える以下のメソッドを試しています。誰かがここで問題を理解するのを助けてくれますか? PythonモジュールとRobotファイルは同じパスにあります。ライブラリステートメントをCheckCode.employee WITH_NAME xyzに変更しようとしました。これは役に立たなかった。ありがとう。ROBOTフレームワークのPythonモジュールから特定のメソッドを呼び出す

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 

答えて

4

ロボットが自動的に1つの例外を除いて、ライブラリファイル内にあるクラスのインスタンスを作成しません:名前が.py拡張子のないファイル名に一致する場合には、自動的にクラスのインスタンスを作成します。たとえば、ファイルCheckCode.pyCheckCodeという名前のクラスが定義されている場合、ロボットは自動的にインスタンスを作成し、そのインスタンスではすべてのメソッドをキーワードとして公開します。

ファイルにいくつかのクラスのインスタンスを作成する場合は、それを行うキーワードを作成する必要があります。たとえば:

# 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

あなたがかもしれないようですね物理パスを使用してライブラリをインポートする必要があります。同じモジュールからの2つのライブラリをインポートするためには、あなたのような名前でそれらをインポートする必要があります。

*** 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のクラスとして実装ライブラリはクラスと同じ名前のモジュールでなければならないことです。

+0

回答ありがとうございます。 PYTHONPATHメソッドをもう少し働かせて、質問があれば戻ってきてください。 – user2905950

+0

私はこの質問に答えようとしていましたが、ブライアンの答えを見てみることをお勧めします。私はコードをどのように構造化すべきかについての彼の評価に同意します。 – ombre42

関連する問題