2016-10-10 4 views
-1

Ich versuche, TestComplete durch Selenium für unsere automatisierten Tests zu ersetzen, idealerweise ohne die verschiedenen Funktionen neu schreiben zu müssen.Erstellen eines Selenium-Moduls zum Ersetzen der Testkomplettierung

Der Plan besteht darin, die Aliase-Struktur zu replizieren, um Elemente in TestComplete mit einem Python-Modul zu finden, das zum Finden von Web-Elementen eingefügt werden kann.

Ich konnte das für eine einzelne Seite arbeiten, aber aufgrund der Tatsache, dass Python mit Importen zu arbeiten scheint, konnte ich bisher keine Möglichkeit finden, darüber hinaus zu importieren.

Beispiel Code innerhalb Test abgeschlossen wäre.

Aliases.LoginPage.Username.SetText („username“)

dies in Selen zu replizieren ich ein Modul erstellt haben Aliase genannt, mit einer Klasse namens Loginpage, eine Eigenschaft namens Benutzernamen enthält.

so sieht Aliases.py wie unten:

from selenium import webdriver 
    driver = webdriver.Chrome("C:\\BrowserDrivers\\chromedriver.exe") 

    class LoginPage: 
     _username = driver.find_element_by_id("txtUser") 

     @property 
     def user(self): 
      return type(self)._user 

und wird durch genannt:

import Aliases 

    login_page = Aliases.LoginPage() 
    login_page.username.send_keys("username") 

das funktioniert gut mit nur der einen Seite, aber wenn ich eine zweite Klasse zu diesem Modul hinzufügen mit dem find_element code für ein element auf einer anderen seite bekomme ich eine "element not found exception"

Das Debugging hat ergeben, dass dies daran liegt, dass Python versucht, alle Klasseneigenschaften zu setzen innerhalb des Aliases-Moduls, wenn es importiert wird, werden natürlich Elemente, die nicht auf der Login-Seite sind, nicht gefunden. Dies tritt auf, selbst wenn ich die Klasse innerhalb des zu importierenden Aliases-Moduls spezifiziere.

Gibt es eine Möglichkeit für mich Python zu sagen, nur die Eigenschaften für die Klasse festgelegt oder importierten Eine andere Möglichkeit für mich, um das Projekt zu strukturieren, um die Art und Weise Elemente zu replizieren innerhalb des laufenden codierten Tests gefunden werden?

Alternativ, nähere ich mich dem falschen Weg und ich sollte nur anfangen, den aktuellen Code zu ändern, müssen wir selenspezifisch sein?

Antwort

1

Ich weiß nicht das Ausmaß der Änderungen, über die Sie sprechen, aber meine Vermutung ist, dass es schneller (und besser) wäre, nur die Tests neu zu schreiben als zu versuchen, Code zu schreiben, so dass Sie nicht müssen Änderungen vornehmen Auf lange Sicht wird das Neuschreiben wahrscheinlich weniger Wartung erfordern und einfacher zu debuggen sein. Nimm dir also die Zeit, sie richtig zu schreiben. Ich habe vor etwa einem Jahr so ​​etwas gemacht, als wir von TestComplete/Javascript zu Selenium/Java gewechselt sind. Ich musste Java lernen und alles in Selenium umschreiben, aber am Ende bin ich wirklich glücklich mit dem Wechsel. Eine stark typisierte Sprache, eine bessere IDE (Eclipse) und so weiter haben mich viel produktiver gemacht und die Tests sind schneller, widerstandsfähiger und einfacher zu warten und zu debuggen.

+0

Der ursprüngliche Beitrag war gut geschrieben, aber, wie diese Antwort angibt, ist es wahrscheinlich am besten, nur die Arbeit zu wiederholen, anstatt zu versuchen, von "TestComplete" zu "Selenium" zu migrieren. Auch für das OP ist dies ** Ihre Antwort. – Brian

+0

Danke, das ist der Ansatz, der jetzt genommen wurde. – lw246

Verwandte Themen