2016-06-24 8 views
1

Ich versuche, ein Python-Modul für mehr als 3 Stunden ohne Erfolg zu fahren. Ich ging die Schritte durch, die in der vierten Antwort hier erklärt werden, wo es vorschlägt, ein Python-Modul Selenium2LibraryExt zu erstellen. How to get All Text in robot framework ?Wie fügt man ein Python-Modul hinzu, das Sel2Lib verwendet, ohne mehrere Schlüsselwortfehler zu bekommen?

das Problem, dass ich beobachten ist, dass seit ich Selenim2Library in meinem anderen Codes des gleichen Tests verwende jetzt importieren i Selenium2LibraryExt die von Selenim2Library erbt, mein Test weiß nicht mehr, dass z Klicken Sie auf Element Stichwort comesfrom Selenim2Library oder Selenium2LibraryExt und es gibt mir mehr Schlüsselwort Fehler

Also habe ich 1-I

entfernt
 from Selenium2Library import Selenium2Library 

aus dem Kopf meines Python-Modul, aber ich ließ es als Bibliothek bleibt in meinem Testfall: Einstellungen

Library   Selenium2Library 

es hat nicht geklappt. 2-Then i entfernt

Library   Selenium2Library 

von meinem Testfall aber hinzugefügt:

from Selenium2Library import Selenium2Library 

im Kopf meines Python-Modul. aber in beiden Fällen bekomme ich Fehler. Wie sollte ich 2 selen2library Bibliotheken, die ich in meinem Test gesehen habe, nicht haben?

Dank

+0

Ihr Problem in etwa so aussieht: http://stackoverflow.com/questions/32230658/issue-in-creating-custom -keyword-in-python-with-selen2library/32258272 – Pekka

Antwort

0

So können Sie leicht dieses Problem umgehen, indem man die jeweiligen Bibliothek spezifizieren Sie verwenden möchten. Zum Beispiel:

Selenium2LibraryExt.Click Element 
+0

Dies behebt nicht das Problem der benutzerdefinierten Bibliothek und Selenium2Library gibt keinen Status frei (Browserinstanzen). – ombre42

2

Wenn Sie mit einer Bibliothek gehen, die dann Ihren Testdaten muss importiert werden entweder Selenium2Library oder Ihre benutzerdefinierte Bibliothek, aber nicht beide erbt. Wenn Sie nur über eine freigegebene Ressourcendatei und nicht direkt in die Tests importieren, ist dies einfacher zu steuern.

Eine weitere Möglichkeit ist es, eine Bibliothek zu erstellen, die Selenium2Library erstreckt sich ohne es zu ersetzen:

from robot.libraries.BuiltIn import BuiltIn 

class Selenium2LibraryExt(object): 

    @property 
    def _s2l(self): 
     return BuiltIn().get_library_instance('Selenium2Library') 

    def get_all_texts(self, locator): 
     """Returns the text values of elements identified by `locator`.""" 
     elements = self._s2l._element_find(locator, False, True) 
     return [e.text for e in elements] 

Wenn Sie eine aktuelle Version von Selenium2Library (> = 1.7) mit, Get Webelement und Get Webelements können Sie viel tun dort die Dinge sind für nicht keyword ...

@{texts} Create List 
@{elems} Get Webelements some locator 
:FOR ${elem} IN @{elems} 
\ ${text} Get Text ${elem} 
\ Append To List ${texts} ${text} 

Gleiche, aber den Text immer mit einem webelement mit der erweiterten Variable Syntax zu arbeiten.

@{texts} Create List 
@{elems} Get Webelements some locator 
:FOR ${elem} IN @{elems} 
\ Append To List ${texts} ${elem.text} 

Oder in Python:

from robot.libraries.BuiltIn import BuiltIn 

class Selenium2LibraryExt(object): 

    def get_all_texts(self, locator): 
     """Returns the text values of elements identified by `locator`.""" 
     s2l = BuiltIn().get_library_instance('Selenium2Library') 
     elements = s2l.get_webelements(locator) 
     # or elements = BuiltIn().run_keyword('Get Webelements', locator) 
     return [e.text for e in elements] 

Siehe auch https://stackoverflow.com/a/35323931/2532697

+0

Danke, ich habe eine der selen2libraries aus meinen Dateien entfernt und meine benutzerdefinierte Bibliothek in mein RF-Verzeichnis gelegt.aber es zeigt mir immer noch denselben Fehler. – Michelle

+0

Danke, ich habe eine der selen2libraries aus meinen Dateien entfernt und meine benutzerdefinierte Bibliothek in mein RF-Verzeichnis eingefügt. aber es zeigt mir immer noch denselben Fehler. dann habe ich mich entschieden, get webelement (s) zu verwenden, aber ich bekomme welches von nein ist benutze mich. Lassen Sie mich erklären, dass ich mehrere Widget-Header habe, die NICHT in einer Liste sind, aber sie haben das gleiche HTML-Tag. also versuche ich alle Header dieser Widgets auf einmal zu bekommen. – Michelle

+0

, wenn ich Xpath-Helfer-Plugin und schreiben Xpath-Helfer-Plugin und $ {webelement} \t Get Webelement \t // div [@ class = "rqhdrtitle"] es führt zu allen Überschriften. aber wenn ich das gleiche in Ride mache mit $ {widgets headern} \t Get Text \t // div [@ class = "rqhdrtitle"] oder wie du gesagt hast $ {webelement} \t Get Webelement \t // div [@ class = "rqhdrtitle"] Ich bekomme entweder den ersten Widget-Header von dem "". irgendeine Idee? Bitte? – Michelle

Verwandte Themen