Как нажать на кнопку через Selenium и Python - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь нажать на следующую кнопку, используя Selenium с python:

<button type="submit" tabindex="4" id="sbmt" name="_eventId_proceed">
          Einloggen
</button>

Это просто простая кнопка, которая выглядит следующим образом:

enter image description here

Код:

driver.find_element_by_id('sbmt').click()

Это приводит к следующему исключению:

selenium.common.exceptions.ElementNotInteractableException: Message:
Element <button id="sbmt" name="_eventId_proceed" type="submit">
could not be scrolledinto view

Итак, я попытался прокрутить элемент, используя ActionChains(driver).move_to_element(driver.find_elements_by_id('sbmt')[1]).perform(), прежде чем нажать кнопку.

(Доступ ко второму элементу с [1], поскольку первый приведет к исключению selenium.common.exceptions.WebDriverException: Message: TypeError: rect is undefined.).

Тогда я использовал

wait = WebDriverWait(driver, 5)
submit_btn = wait.until(EC.element_to_be_clickable((By.ID, 'sbmt')))

, чтобы дождаться нажатия кнопки. Ничего из этого не помогло.

Я также использовал driver.find_element_by_xpath и другие, я тестировал его с Firefox и Chrome.

Как я могу нажать на кнопку без исключения?

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 05 января 2019

Чтобы вызвать click() на элементе, вам необходимо сначала использовать WebDriverWait с expected_conditions, чтобы элемент был кликабельным , и вы можете использовать следующее решение:

  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='sbmt' and normalize-space()='Einloggen']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...