【问题标题】:How do I loop a function if a certain element is not present in selenium?如果硒中不存在某个元素,如何循环函数?
【发布时间】:2017-11-20 13:09:49
【问题描述】:

我想在 selenium 中循环一个函数。

所以只要网页上的DisplayName不是“fish”,我想让程序输入“fish”并按回车,直到显示名称为“fish”,然后我希望程序停止。

目前,程序继续运行并输入“fishfishfishfishfish”作为显示名称。

 DisplayName = driver.find_element_by_xpath("""//*[@id="DisplayName"]""")
    while (DisplayName != "fish"):
        DisplayName.send_keys("fish"")
        DisplayName.send_keys(u'\ue007')

【问题讨论】:

  • 您不会在 while 循环中刷新 DisplayName 中的值。输入“fish”后,获取该字段的新值,以便 while 循环有一些新的东西可以测试。
  • 4 个问题。 1) DisplayName on the web page to be "fish" 的标准是什么? 2)为此我们需要做什么? 3) 您是否尝试在同一元素或其他元素中输入“鱼”? 4) 按Enter 是否会将DisplayName 更改为"fish"
  • 同一个元素。按下回车确实会将 DisplayName 更改为“fish”。首先,一旦发送键,元素就会被填充,然后按下回车键保存它,但是程序会继续运行,每次它已经填充时都会输入一条额外的鱼。我只想知道如何检查元素是否 == 某个字符串,以便它做某事(在这种情况下,停止。)
  • DisplayName 是元素,而不是文本。如果是INPUT 标签,则使用DisplayName.textDisplayName.get_atttribute("value") 等。

标签: python selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

在开始输入之前使用clear方法清除字段。
还使用一个恒定的等待一小段时间 - 在 AJAX 页面中,当字段值更改时可能会触发一些 javascript,给这个 javascript 一些时间来执行(我不知道如何在 phyton 中执行此操作,在下面的示例中我使用sleep( 1 second),在 Java 中我们使用 Thread.sleep( 1000 ) 休眠 1 秒。

DisplayName = driver.find_element_by_xpath("""//*[@id="DisplayName"]""")
    while (DisplayName != "fish"):
        DisplayName.clear()
        DisplayName.send_keys("fish"")
        DisplayName.send_keys(u'\ue007')
        sleep( 1 second)

【讨论】:

  • DisplayName 是元素,而不是包含的文本。你会想要使用while (DisplayName.text != "fish"):,或者如果它是INPUT,你会想要检查元素的值。
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 2014-01-21
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多