Selenium Python найти элемент по имени не работает - PullRequest
0 голосов
/ 27 июня 2018

Я тестирую веб-форму с несколькими полями, используя веб-драйвер PyCharm и Selenium.

На веб-странице есть два похожих DIV для телефона и электронной почты:

<div class="popup-subscribe-new__content">
                        <div class="field field_type_email js-field-custom-email js-field">
                            <input type="phone" name="phone" placeholder="Phone Number" autocomplete="off" required="required" class="field__input js-field-input js-inputmask-phone" pattern="^[0-9\+\-\( \)]+$" data-trim="true" pattern-flags="i">
                            <div class="field__error">Enter the phone number</div>
                        </div>
                    </div>

и

<div class="popup-subscribe-new__content">
                    <div class="field field_type_email js-field-custom-email js-field">
                        <input type="email" name="email" placeholder="E-mail" autocomplete="off" required="required" class="field__input js-field-input" pattern="^([A-Za-z0-9_\.\+\-])+@([A-Za-z0-9_\.\-])+\.([A-Za-z]{2,4})$" data-trim="true">
                        <div class="field__error">Enter the e-mail</div>
                    </div>
                </div>

в моем тесте я использовал phone_field = driver.find_element_by_name ('phone') для поиска телефона и email_field = driver.find_element_by_name ('email') для поиска по электронной почте

В результате тест успешно обнаружил поле телефона, но после попытки найти поле электронной почты PyCharp ответил ElementNotVisibleException: Сообщение: элемент не виден

Где я был не прав? Спасибо, Евгений

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вы можете попробовать этот код:

wait = WebDriverWait(browser, 30) 

phone_field = driver.find_element_by_name('phone')  
phone_field.send_keys('some phone number')
email_field = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div[class*='js-field-custom-email']>input[name='email']')))  

email_field.send_keys("""some@email.com"""")  

убедитесь, что импортировали эти:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 27 июня 2018

Попробуйте подождать, пока элемент не будет виден так:

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.NAME, "email")))
email_field = driver.find_element_by_name('email')

Более подробную информацию о waits можно найти в документации здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...