【问题标题】:python selenium/unittest check whether value has changedpython selenium/unittest 检查值是否改变
【发布时间】:2019-10-09 10:02:28
【问题描述】:

为什么 q1 和 q2 的结果相同? q2 似乎被 q1 覆盖。不明白,因为它们引用了相同的元素,但在不同的时间点将其值存储在不同的变量中。

在我第二次执行 ic.click 之后肯定会有变化。当我只运行第二部分时,它会给我正确的结果。

def test_relation(self):
    ic = self.driver.find_element_by_xpath("//select[@id='selectNumber']/option[2]")
    ic.click()

    q1 = self.driver.find_elements_by_xpath("//select[@class='quarterSelect form__multiselect']/option")
    print(len(q1))

    ic = self.driver.find_element_by_xpath("//select[@id='selectNumber']/option[1]")
    ic.click()

    q2 = self.driver.find_elements_by_xpath("//select[@class='quarterSelect form__multiselect']/option")
    print(len(q2))

【问题讨论】:

  • 分享您的 HTML。
  • 首先,如果您发布(部分)DOM 会有帮助。其次,如果您说在执行 ic.click() 之后 DOM 发生了变化,那么看起来您的代码在 DOM 由于该单击而实际更改之前运行。因此,您仍在针对旧 DOM 执行代码。您可能想要构建一个“等待”。

标签: selenium python-unittest


【解决方案1】:

如果您期望 ic.click() 导致某些事情发生,那么您需要等待该更改发生,然后才能查找它的结果。添加对 WebDriverWait().until() 的调用可能会对您有所帮助。

另外,我注意到代码正在打印 len(q1) 和 len(q2)。你确定它们的长度不一样,即使它们在列表中可能有不同的项目?

【讨论】:

  • 是的,我确定 q1 和 q2 的长度不同。但是当我尝试比较在不同时间存储在两个不同变量中的元素的文本值时,我也遇到了这个问题。我也试过 time.sleep() 和 driver.implicitlywait()。这没有帮助。我会按照你的建议尝试一个明确的等待。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2016-08-22
  • 2014-06-15
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 2018-01-23
  • 2021-08-23
  • 2021-05-17
相关资源
最近更新 更多