簡體   English   中英

我怎樣才能從機器人框架中的python類中獲取self對象

[英]How could I get self object from python class in robotframework

Engine.py將導入幾個類作為自身對象

Engine.py

from api import api
from cloud import cloud
class Engine(object):
    def __init__(self, env):
        session = dict()
        self.api = api.API(session)
        self.cloud= cloud.CLOUD(session)

api.py

class API(object):
    def __init__(self, session):
        self.session = session

    def api_keyword(self):
        return SOMETHING

我的問題是:

如何在api.py和cloud.py下使用關鍵字,並且只將Engine.py導入機器人文件

test.robot

*** Settings ***
Library         Engine.py  ${env}


*** Test Cases ***
python class test
    [Tags]    class
    Engine.api.api_keyword

我收到錯誤消息:

找不到名為“Engine.api.api_keyword”的關鍵字。

Robot Framework只將類方法映射到關鍵字; 你的類Engine沒有暴露來自apicloud任何方法 - 它可能在內部使用它們,但是沒有將它們定義為它自己的方法。
所以這是您的第一個解決方案 - 為案例中所需的所有內容創建包裝器方法:

def an_api_method(self):
    self.api.something()

現在,您可以在案例中使用An API Method關鍵字。


解決方案二 - 讓你的類繼承另外兩個:

class Engine(api, cloud):

,您的案件將可以訪問他們所有的公共方法。
這其中更涉及到-你必須調用它們的構造函數(與super()如果你在你的類維持的狀態,你必須適應這一點。 即需要更加激烈的代碼更改。


第三種解決方案不需要對Enhine代碼進行任何更改 - 但是, 免責聲明:我不知道它是否可行:)(我不在電腦上)。
它包含兩個調用 - 首先使用Get Library Instance獲取導入庫的對象(來自Builtin庫),然后Call Method

${ref}=     Get Library Instance    Engine
Call Method     $ref.api    api_keyword

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM