2017-01-23 8 views
-1

私はセレンのwebdriverでいくつかのものをテストしている状況があります。 OneDriveにログインしようとすると、ドライバはすべての待機を無視し、パスワードを入力したページの「要素が表示されません」というエラーが表示されます。これは、この状況でのみ発生し、いくつかのページでログインプロセスを実行するのにほとんど同じコードを使用する残りのインスタンスはうまく動作します。webdriverが特定のページの待機を無視しています

これは、太線がどこエラーocurs一つで失敗コード

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

に対応するコードです。それは要素が見つかりませんでしたが、待機(暗黙のものでさえ)は無視されます。

そして、これはFirefoxのドライバを使用してコードを実行し、

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

追加情報を働くログインコードの一例です。 Chromeのバージョンを使用すると問題なく動作し、ランダムに接続が終了する

+1

? –

+0

この行にはエラーがスローされます "password.send_keys(psw)" この要素は見つかりません。私が暗黙的にwait()を使用しても、それは完全に待ちを無視します。 – inigo

答えて

0

新しいページが読み込まれていないが、フォームの内容を動的に変更して各ステップごとに異なるフィールドが表示されている。これを適切に処理する方法がわからなかったので、内容をロードするのを待つためにtime.sleep(1)を使用し、新しい要素を見つけるためにコードを使用しなければなりませんでした。私はそれが最良の方法ではないことを知っていますが、今のところ私が見つけた唯一の回避策です。

ラインがそれを担当して最終的なコード

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() 
関連する問題