2017-01-23 5 views
-1

ich eine Situation, wo ich ein paar Sachen mit Selen WebDriver bin zu testen. Beim Versuch, sich bei OneDrive anzumelden, ignoriert der Treiber alle Wartezeiten und ich erhalte "Element nicht sichtbar Fehler", speziell für die Seite, auf der Sie das Passwort eingeben. Dies geschieht nur in dieser Situation, und der Rest der Instanzen, in denen ich ziemlich denselben Code verwende, um den Anmeldevorgang auf mehreren Seiten auszuführen, funktioniert gut.WebDriver wartet auf bestimmten Seiten zu ignorieren

Dies ist der Code, um den fehlerhaften Code

def selenium_onedrive(loading_done_event, selenium, user, psw): 
loading_done_event.wait() 
login = selenium.find_elements_by_name('loginfmt')[0] 
login.send_keys(user) 
next_step = selenium.find_element_by_id('idSIButton9') 
next_step.click() 

password = WebDriverWait(selenium, 10).until(
    # EC.presence_of_element_located((By.NAME, "passwd")) 
    EC.element_to_be_clickable((By.ID, "i0118")) 
) 

**password.send_keys(psw)** 
# password.submit() 
next_step = selenium.find_element_by_id('idSIButton9') 
next_step.click() 

Die fette Linie ist die, wo der Fehler ocurs entspricht. Es besagt, dass das Element nicht gefunden wurde, aber die Wartezeiten (auch implizite) ignoriert werden.

Und dies ist ein Beispiel für einen Login-Code, der

def selenium_gdrive(loading_done_event, selenium, user, psw): 
loading_done_event.wait() 
login = selenium.find_elements_by_name('Email')[0] 
login.send_keys(user) 

selenium.find_elements_by_name('signIn')[0].click() 

password = WebDriverWait(selenium, 10).until(
    EC.presence_of_element_located((By.NAME, "Passwd")) 
) 
password.send_keys(psw) 
password.submit() 
# now we will be navigated to the consent page 
consent_accept_button = WebDriverWait(selenium, 10).until(
    EC.element_to_be_clickable((By.ID, "submit_approve_access")) 
) 
consent_accept_button.click() 

Weitere Informationen arbeitet, den Code mit Firefox-Treiber ausgeführt wird. Wenn ich die Chrome-Version verwende, läuft es gut, aber es ist instabil und wird zufällig "Verbindung beendet remoted"

+1

Welche Linie dafür verantwortlich ist? –

+0

der Fehler wird in dieser Zeile "password.send_keys (psw)" es heißt, dass das Element nicht gefunden werden kann. und es ignoriert die Wartezeiten vollständig, auch wenn ich implicitly_wait() verwende – inigo

Antwort

0

Ich bemerkte, dass es nicht eine neue Seite geladen, sondern dynamisch den Inhalt des Formulars geändert, um verschiedene Felder für jeden Schritt anzuzeigen . Ich war mir nicht sicher, wie ich das richtig behandeln sollte, also musste ich time.sleep (1) verwenden, um auf den Inhalt zu warten, und den Code, um die neuen Elemente zu finden. Ich weiß, es ist nicht der beste Weg, aber für den Moment ist die einzige Problemumgehung, die ich gefunden habe.

finale Code

def selenium_onedrive(loading_done_event, selenium, user, psw): 
    loading_done_event.wait() 
    login = selenium.find_elements_by_name('loginfmt')[0] 
    login.send_keys(user) 
    next_step = selenium.find_element_by_id('idSIButton9') 
    next_step.click() 

    time.sleep(1) 

    password = WebDriverWait(selenium, 10).until(
    # EC.presence_of_element_located((By.NAME, "passwd")) 
    EC.element_to_be_clickable((By.ID, "i0118")) 
    ) 

    **password.send_keys(psw)** 
    # password.submit() 
    next_step = selenium.find_element_by_id('idSIButton9') 
    next_step.click() 
Verwandte Themen