无法使用 Selenium 和 Python 更改 angular 元素 text/value

Unable to change angular element text/value using Selenium and Python

我有这个特定元素,它是一个日期输入字段。它没有日历或任何下拉菜单或选择类型。一如既往,我从基本的 driver.find_element_by_id('dataInicio').send_keys(date_value) 开始,但它不起作用,这很奇怪,因为它不会引发错误,它实际上 send_keys 元素,但是这个 send_keys 没有改变元素中的属性或 属性 。然后我尝试打印 value 属性,好吧,我可以达到,它 returns 这个控件的标准填充值,它也可以通过设置它来达到属性值,但是同样,设置属性时它没有任何改变值到特定的 date_value 它没有任何改变(之后我尝试通过打印 return 值 属性 并且没有改变)。还尝试在整个 html 页面中搜索标准填充值,ha: Nothing, no where.

我实际上可以通过以下特定行更改它的 属性 值:

nvg.execute_script("arguments[0].value = '" + end_month_date + "';", end_date_field)

然后我打印值 property/attribute 并且它 return 是 'end_month_date' 值,但是,每当我点击开始下载时,它都无法理解输入的内容 'end_month_date' 值,而是使用字段中的标准值生成下载。

所需的元素是 Angular element, so ideally to send a character sequence to the element you need to induce WebDriverWait for the for the dynamic element to completely render within the HTML DOM and you can use either of the following :

  • 使用CSS_SELECTOR:

    WebDriverWait(nvg, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#dataInicio[name='dataInicio'][ng-model='filterDtFrom'][max-date='filterDtTo']"))).send_keys(end_month_date)
    
  • 使用XPATH:

    WebDriverWait(nvg, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='dataInicio' and @name='dataInicio'][@ng-model='filterDtFrom' and @max-date='filterDtTo']"))).send_keys(end_month_date)
    
  • 使用execute_script():

    • 使用CSS_SELECTOR:

      end_date_field = WebDriverWait(nvg, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#dataInicio[name='dataInicio'][ng-model='filterDtFrom'][max-date='filterDtTo']")))
      nvg.execute_script("arguments[0].value = '" + end_month_date + "';", end_date_field)
      
    • 使用XPATH:

      end_date_field = WebDriverWait(nvg, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='dataInicio' and @name='dataInicio'][@ng-model='filterDtFrom' and @max-date='filterDtTo']")))
      nvg.execute_script("arguments[0].value = '" + end_month_date + "';", end_date_field)
      
  • 注意:您必须添加以下导入:

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