Как проверить, существует ли элемент, и вызвать метод send_keys через Selenium и Python. - PullRequest
1 голос
/ 07 марта 2019

Это мой HTML-код. Когда я нажимаю на одну кнопку, на странице отображается div с этим кодом:

<label for="email"> "Add an email address"
    <input name="email" id="email" class="mb3 ember-text-field ember-view"type="email">
</label>

Первое, что я хочу сделать, это проверить, есть ли у меня <input>. Если да, я хочу сделать send_keys().

Я пробовал что-то вроде этого:

buttons = (driver.find_elements_by_css_selector(".button-secondary-medium"))
for i in range(len(buttons)):
    buttons[i].click()
    y = randint(5, 9)
    time.sleep(y)
try:
    email = ui.WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID, "email")))
    email.send_keys(" paul@yahoo.com")
except:
    print("no input")

У меня есть список кнопок, каждая кнопка показывает мне пустую div, а иногда и Кнопка показывает div с введенным адресом электронной почты.

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Если вы хотите проверить тег input и вызвать send_keys(), вам нужно вызвать WebDriverWait в блоке try-catch{} для element_to_be_clickable(), и вы можете использоватьследующее решение:

  • Блок кода:

    try:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='email']"))).send_keys("Paul@Vio.com")
    except TimeoutException:
        print("Element doesn't exist")
    
  • Примечание : необходимо добавить следующие импортные данные:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 07 марта 2019

Вы можете использовать следующий код:

from selenium.webdriver.support import ui
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


buttons = driver.find_elements_by_css_selector(".button-secondary-medium")

for button in buttons:

    button.click()

    try:

        email = ui.WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "email")))
        email.send_keys("paul@yahoo.com")

    except:

        print("There is no input element.")

Я использовал здесь явное ожидание и 10-секундное ожидание, чтобы элемент был кликабельным и трудноразрешимым. Блок try/except используется для проверки существования input.

PS: Кроме того, я не понимаю использования множественной версии find_element_*, потому что в вашем HTML-коде есть только один элемент input.

Надеюсь, это поможет вам!

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