2016-06-13 7 views
1

Ich bin ziemlich neu in Python und Selen und versuche, einige automatisierte Tests von zu bekommen Unsere Website stellt die Website auf den Prüfstand Ich setze die Tests mit dem Seitenobjektmodell, so dass Änderungen an Locatoren nur an einer Stelle aktualisiert werden müssen.In diesem Zusammenhang richte ich eine Funktion ein, um auf unsere Abonnentenschaltfläche zu warten . klickbare Allerdings, wenn ich diese Funktion ich folgende Fehlermeldung erhalten, rufen:Python: "__init __() nimmt 2 Positionsargumente, aber 3 wurden gegeben" mit Webdriver, wenn die Element-Locator-Informationen aus einer separaten Datei gezogen werden

Traceback (most recent call last): 
File "click_subscribe_button_test.py", line 51, in test_subscribe_click 
main_page.wait_subscribe_button_clickable() 
File "page.py", line 64, in wait_subscribe_button_clickable 
wait.until(EC.element_to_be_clickable((*MainPageLocators.subscribe_button))) 
TypeError: __init__() takes 2 positional arguments but 3 were given 

ich habe hier und auf anderen Websites eine Reihe von verwandten Beiträge lesen, und während sie mich näher dazu beigetragen haben, zu erhalten, um das Problem zu lösen, ich Ich stoße immer noch auf den obigen Fehler relevanten Code ist unten, es ist aus zwei separaten Dateien, da die Locators in einer anderen Datei als die Seite Objekte sind.

page.py

def wait_subscribe_button_clickable(self): 
    subscribeElement = self.driver.find_element(*MainPageLocators.subscribe_button) 
    wait = WebDriverWait(self.driver,20) 
    wait.until(EC.element_to_be_clickable((*MainPageLocators.subscribe_button))) 

locators.py

class MainPageLocators (object): 
    subscribe_button = (By.CSS_SELECTOR, 'li.last.leaf.subscribe') 

Das Problem rund um den Weg zu sein scheint, dass ich den Locators aus einer separaten Datei bin ziehen, denn wenn ich

wait.until(EC.element_to_be_clickable((*MainPageLocators.subscribe_button))) 
ändern

bis

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'li.last.leaf.subscribe'))) 

Der Code funktioniert wie vorgesehen.

Es kann etwas sein, das ich nicht verstehe, wie die Funktion * MainPageLocators_scribe_button die Locators zieht, aber ich konnte nicht herausfinden, was falsch ist.

Jede Hilfe oder Anleitung würde sehr geschätzt werden.

Antwort

1

Nur nicht auspacken den Locator auf allen, übergeben Sie es wie es ist, als ein Tupel:

wait.until(EC.element_to_be_clickable(MainPageLocators.subscribe_button)) 
+0

Dank! Das hat super funktioniert. Zeigt mich auch auf den nächsten Bereich, um etwas zu erfahren. Ich schätze die Hilfe. – wappowers

Verwandte Themen