【问题标题】:How I can insert a text into a textfield with Selenium?如何使用 Selenium 将文本插入文本字段?
【发布时间】:2021-02-26 07:48:48
【问题描述】:

我正在开发一个使用 Python 和 Selenium 的项目。 在图像中,您可以看到我尝试在其中插入文本的输入字段的代码。

<input data-v-382b0a6e="" id="expiration" name="expiration" type="text" required="required" data-test="expiration-input" autocomplete="billing cc-exp" dir="auto" class="form-textbox form-textbox-text form-textbox-entered" style="" aria-invalid="true">

我的第一个方法是使用.send_keys(variable) 函数。那里的问题是变量月份将被插入到年份中。我之前尝试清除输入字段并单击它,但它没有帮助。

WebDriverWait(driver, 30).until(
    EC.presence_of_element_located(
        (By.XPATH, "//*[@data-test='expiration-input']"))).send_keys(expMonth) 

下图显示了错误。

我也尝试使用 Javascript 执行器向这个输入字段插入一个值,但是它没有 value 属性,也不会使用这个属性。

我知道我可以在这里做什么了。 有人提示我如何将文本插入此字段?

【问题讨论】:

    标签: python selenium automation e2e-testing geckodriver


    【解决方案1】:

    要将字符序列发送到元素而不是presence_of_element_located(),您必须为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#expiration[name='expiration'][data-test='expiration-input']"))).send_keys(expMonth)
      
    • 使用XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='expiration' and @name='expiration'][@data-test='expiration-input']"))).send_keys(expMonth)
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

    • 您好,感谢您的帮助。我尝试使用您建议的解决方案,但遇到与以前相同的问题。
    • 我没有足够的帖子在聊天中写:/
    • @kselight 您没有提到您面临的任何具体问题/错误。你只提到没有帮助。使用基于文本的相关 HTML 更新问题并观察到错误。
    猜你喜欢
    • 2016-04-01
    • 2021-12-30
    • 1970-01-01
    • 2016-06-10
    • 2020-07-13
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多