2016-06-13 1 views
1

Je suis assez nouveau à Python et Selenium, et j'essaie d'obtenir des tests automatisés de Je suis en train de paramétrer les tests en utilisant le modèle d'objet page afin que les changements de localisateurs ne doivent être mis à jour que dans un seul endroit.En ce sens, je suis en train d'installer une fonction pour attendre que notre bouton d'abonnement soit . cliquable Cependant, quand je l'appelle cette fonction, je reçois l'erreur suivante:Python: "__init __() prend 2 arguments positionnels mais 3 ont été donnés" avec Webdriver, quand l'information localisateur d'élément est extraite d'un fichier séparé

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 

J'ai lu un certain nombre de messages connexes sur ce site, et d'autres sites, et alors qu'ils me ont aidé à se rapprocher de la résolution de la question, je Je rencontre toujours l'erreur ci-dessus. Le code correspondant est ci-dessous, il provient de deux fichiers distincts car les localisateurs sont dans un fichier différent des objets page.

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') 

Le problème semble être autour de la façon dont je tire les localisateurs d'un fichier séparé, car si je change

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

à

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

Le code fonctionne comme prévu.

Il peut y avoir quelque chose que je ne comprends pas sur la façon dont la fonction * MainPageLocators.subscribe_button tire les locators, mais je n'ai pas été capable de trouver ce qui ne va pas.

Toute aide ou conseil serait grandement apprécié.

Répondre

1

Juste ne déballez pas le localisateur du tout, transmettre tel quel, comme tuple:

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

Merci! Cela a bien fonctionné. M'indique également le prochain secteur à apprendre. J'apprécie l'aide. – wappowers