Gewusst wie: übergeben Sie Objekte, um keywords in robot framework?
Habe ich eine python-Klasse MyClass
geschrieben in der Datei MyClass.py
:
class MyClass(object):
def __init__(self):
self.myvar = list()
def setvar(self, val):
self.myvar = val
def mymethod(self):
return self.myvar
Habe ich importiert in Robot Framework wie folgt:
Library MyClass WITH NAME my_component
Ich habe auch ein Schlüsselwort, mit dem Aufruf einer Methode von Objekten, die an ihn übergeben werden:
testing component
[Arguments] ${cmp}
log to console ************* ${cmp}
${result} = ${cmp}.mymethod
Ich habe mehrere Objekte instantiiert von Klasse MyClass
und jedes Objekt hat unterschiedliche Eigenschaften. Ich möchte zu Holen Ihre Attribute mit testing component
keyword, unabhängig von dem Objekt selbst.
Wenn ich rufe testing component
vorbei my_component
:
Test Method Call
testing component my_component
Bekomme ich:
No keyword with name '${cmp}.mymethod' found.
Wenn ich rufe, auf diese Weise im keyword -testing component
:
${result} = call method ${cmp} mymethod
Bekomme ich:
Object 'my_component' does not have method 'mymethod'.
Ich habe auch versucht call method my_component mymethod
für den test und ich war wieder Object 'my_component' does not have method 'mymethod'.
.
Aber wenn ich ${result} = my_component.mymethod
funktioniert alles einwandfrei.
- Tut
MyClass.py
definieren eine Klasse mit dem NamenMyClass
? Oder istMyClass.py
ein einfaches Modul mit Funktionen? - überprüfen Sie bitte mein edit auf die Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die wörtliche Antwort auf Ihre Frage, wie das aufrufen einer Methode von einem python-Objekt können Sie erweiterte Variablen-syntax (z.B.:
${cmp.mymethod()}
oder verwenden Sie dencall method
Stichwort (zB:call method ${cmp} mymethod
).Beispielsweise normale Skalare Variablen in Roboter werden in python string-Objekte. So können wir rufen Methoden auf, z.B.
lower()
undupper()
. Die folgenden test-Fall zeigt, wie können Sie diese Methoden aufrufen, die auf einer saite, über die zwei Mechanismen, die ich bereits erwähnt habe:Das problem mit deinem code ist dein Missverständnis, was
my_component
und${cmp}
darstellt. Sie sind nicht python-Objekte. Es ist vielmehr die Namen von einem robot framework-Bibliothek. Obwohl unter der Haube kann es existieren, als eine Referenz auf eine Instanz einer Klasse in der Bibliothek definiert, innerhalb der testmy_component
ist einfach die Namen der Bibliothek.Dies ist der Grund, warum
my_component.my_method
funktioniert -my_component
ist der name einer Bibliothek, undmy_method
ist der name von einem Schlüsselwort innerhalb dieser Bibliothek. Dies ist die standard-robot framework syntax. Sehen Die Angabe einer keyword explizit in das robot framework-user guide.Wenn Sie wollen in der Lage sein, um pass
my_component
herum, als wäre es ein Objekt, können Sie mitrun keyword
laufen die keywords umgesetzt, die Bibliothek.Zum Beispiel, beginnen Sie mit der Erstellung
MyClass.py
mit dem folgenden code:Ihrem code arbeiten können, wenn Sie ersetzen
call method
mitrun keyword
:Schließlich, wenn Sie wirklich wollen, zu passieren, die eigentliche Bibliothek Objekt um, können Sie mit der integrierten keyword -Erhalten Library-Instanz, um die eigentliche Bibliothek-Objekt, das Sie dann verwenden können, mit Rufen Sie Die Methode
Seltsam, die extended-Variablen-syntax funktioniert nicht in diesem Fall. Ich weiß nicht, warum.