如何验证元素是否存在并通过Selenium和Python调用send_keys方法

问题描述 投票:1回答:2

这是我的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(" [email protected]")
except:
    print("no input")

我有一个按钮列表,每个按钮显示一个空白的div,有时按钮显示一个输入电子邮件的div。

python selenium selenium-webdriver webdriver webdriverwait
2个回答
0
投票

您可以使用以下代码:

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("[email protected]")

    except:

        print("There is no input element.")

我在这里使用了显式等待和10秒等待元素可点击和难以处理。 try/except块用于检查input是否存在。

PS:另外,我不理解find_element_*的复数版本的用法,因为你的HTML代码中只有一个input元素。

希望它能帮到你!


0
投票

如果你想检查输入标签并调用send_keys(),你需要在try-catch{}element_to_be_clickable()块中引入WebDriverWait,你可以使用以下解决方案:

  • 代码块: try: WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='email']"))).send_keys("[email protected]") 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
© www.soinside.com 2019 - 2024. All rights reserved.