2017-01-23 7 views
-1

У меня есть ситуация, когда я тестирую некоторые вещи с помощью selenium webdriver. При попытке входа в OneDrive драйвер игнорирует все ожидания, и я получаю «элемент не видимой ошибки», конкретно для страницы, на которой вы вводите пароль. Это происходит только в этой ситуации, и все остальные экземпляры, где я использую почти тот же код для запуска процесса входа на нескольких страницах, работают нормально.webdriver игнорирует ожидания на определенных страницах

Это код, соответствующий коду неисправного

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

Жирная линия является тот, где ocurs ошибок. Он говорит, что элемент не может быть найден, но ожидания (даже неявные) игнорируются.

И это пример кода авторизации, который работает

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

Дополнительной информации, работает код с драйвером Firefox. Если я использую версию Chrome, она работает нормально, но она нестабильна и получает случайное «соединение завершено удаленно»

+1

Какая линия отвечает за это? –

+0

ошибка высылается в этой строке "password.send_keys (psw)" В нем говорится, что элемент не может быть найден. и он полностью игнорирует ожидания, даже если я использую implicitly_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()