Selenio – visibilidad_de_elemento_locado: __init __ () toma exactamente 2 argumentos (3 dados)

Recibo este error en mi código de prueba que usa Selenium Python Bindings:

> twitter_campaigns = wait.until(EC.visibility_of_element_located(By.CSS_SELECTOR, TWITTER_CAMPAIGNS)) E TypeError: __init__() takes exactly 2 arguments (3 given) 

Y esto es lo que estoy ejecutando:

 class TestTwitter(TestLogin, TestBuying): def setup(self, timeout=10): self.driver = webdriver.Firefox() self.driver.get(BASEURL) self.driver.implicitly_wait(timeout) def test_campaigns_loaded(self, timeout=10): self.signin_action() self.view_twitter_dashboard() self.select_brand() wait = WebDriverWait(self.driver, timeout) twitter_campaigns = wait.until(EC.visibility_of_element_located(By.CSS_SELECTOR, TWITTER_CAMPAIGNS)) assert True == twitter_campaigns def teardown(self): self.driver.close() 

Así que me pregunto por qué obtengo los errores anteriores, en todas las clases que no he definido un __init__() vez de eso, definí un método setUp y tearDown como pytest follow. ¿Alguna idea de por qué está tomando 3 argumentos?

La pregunta que debe hacerse no es “por qué está tomando 3 argumentos”, sino ” qué está tomando 3 argumentos”. Su rastreo se refiere a una línea muy específica en el código, y es allí donde reside el problema.

De acuerdo con la documentación de Selenium Python aquí, selenium.webdriver.support.expected_conditions.visibility_of_element_located debe llamarse con una tupla; no es una función, sino en realidad una clase, cuyo inicializador espera solo 1 argumento más allá del yo implícito:

 class visibility_of_element_located(object): # ... def __init__(self, locator): # ... 

Por lo tanto, debe llamar la visibility_of_element_located con dos paréntesis nesteds:

 wait.until(EC.visibility_of_element_located( ( By.CSS_SELECTOR, TWITTER_CAMPAIGNS ) )) 

Lo que significa que en lugar de los 3 argumentos self , By.CSS_SELECTOR y TWITTER_CAMPAIGNS , se le TWITTER_CAMPAIGNS la visibility_of_element_located.__init__ con solo 2 argumentos esperados: el self implícito y el localizador: una tupla (type, expression) .