首页 > 解决方案 > Python Selenium WebDriverWait 不工作,driver.findElement 工作

问题描述

我正在尝试使用 Selenium 启用 RadioButton。

我正在获取按钮和文本字段以及所有这些东西

driver = webdriver.Chrome(executable_path='/usr..'
wait = WebDriverWait(driver, 10)

但是现在当涉及到单选按钮时,它突然失败了:

Traceback (most recent call last):
  File "/home/jan/PycharmProjects/MailCreation/mail_creation", line 53, in <module>
    creator.create(1)
  File "/home/jan/PycharmProjects/MailCreation/mail_creation", line 43, in create
    wait.until(EC.element_to_be_clickable((By.ID, 'id-signup-radio-email'))).click()
  File "/home/jan/PycharmProjects/MailCreation/venv/lib/python3.6/site-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

首先,我认为可能是因为 iframe,但我找不到。

我用那行代码用 id、css-selector 和 xpath 尝试了几次:

wait.until(EC.element_to_be_clickable((By.ID, 'id-signup-radio-email'))).click()

它失败了,每一次。然后我尝试了

time.sleep(3)
test = driver.find_element_by_id('id-signup-radio-email')
test.click()

它以某种方式工作得很好。为什么?我不明白。所以它真的不是让它工作,而是理解为什么。

标签: pythonseleniumradio-buttonwebdriverwait

解决方案


“我正在尝试使用 Selenium 启用 RadioButton。”

禁用的元素不可点击。尝试EC.presence_of_element_located代替EC.element_to_be_clickable.

所以基本上:

target element = wait.until(EC.presence_of_element_located((By.ID, 'id-signup-radio-email')))

推荐阅读