【问题标题】:Unable to change angular element text/value using Selenium and Python无法使用 Selenium 和 Python 更改角度元素文本/值
【发布时间】:2021-12-27 03:32:54
【问题描述】:

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

我实际上可以通过这个特定的行来改变它的属性值:

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

然后我打印 value 属性/属性并返回“end_month_date”值,但是,每当我单击开始下载时,它看到不理解输入的“end_month_date”值,而是使用标准生成下载字段值。

【问题讨论】:

  • 来自哪个网站?

标签: python angular selenium xpath css-selectors


【解决方案1】:

所需的元素是 Angular 元素,因此理想情况下,将 字符序列 发送到您需要诱导 WebDriverWait 的元素,以使动态元素在其中完全呈现 element_to_be_clickable() HTML DOM,您可以使用以下任一Locator Strategy

  • 使用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
    

【讨论】:

  • 非常感谢!结果很完美!
猜你喜欢
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2012-08-14
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多