python - 等待元素中的文本发生更改

标签 python selenium testing automation automated-tests

请建议 Selenium 是否有一个好的选项可以等待元素内的文本发生更改。 条件:

  • 页面不会自动重新加载
  • 我需要的文本元素会动态重新加载
  • 更新此数据所需的时间未知
  • 预期文本未知。它是一个时间戳。

我编写了一个方法,每 1 秒(或我设置的任何时间)检查一次,并在更改时获取值。 但我认为可能有一些更好的选择。我尝试避免使用 time.sleep,但在当前情况下,这是我唯一的选择。 注意,该文本即使在 5 分钟后也可能会发生变化,因此我需要调整重试次数 retriestime.sleep() 另外,我使用 print 只是为了调试。

def wait_for_text(driver):  
    init_text = "init text"
    retry = 1
    retries = 120
    start_time = time.time()
    while retry <= retries:
        time.sleep(1)
        field_text = driver.find_element_by_id("my_id").text
        if field_text != init_text:
            break
        retry += 1
        now = time.time()
        total_time = now-start_time
        print(f"Total time for text to change {total_time}")
    print(f"Final field value: {field_text}")

最佳答案

你可以这样做:

driver.get("https://stackoverflow.com")
init_text = "Log in"
from selenium.webdriver.support.wait import WebDriverWait
waiter = WebDriverWait(driver=driver, timeout=120, poll_frequency=1)
waiter.until(lambda drv: drv.find_element_by_class_name("login-link").text != init_text)
print("Success")
driver.quit()

所以你基本上是在等待一个元素停止等于给定值。

P.S. - 您可以通过更改开发工具中的按钮文本来测试上面的代码片段。

关于python - 等待元素中的文本发生更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66859094/

相关文章:

python - 仅绘制某些日子的 Pandas 数据框

Python Selenium xPath 从 div 类 a rel 中选择

ssl - 使用 maven 运行 Selenium RC - https 站点有证书问题

git - 使用服务器端 Hook 实现 TDD 的红/绿/重构文化

python - 给定经纬度和距离,我想找到一个边界框

python - 从字符串中提取数值并保存到数据框时出现问题

python - 为什么 Python 中的装饰器样式上下文管理器无法捕获 Tkinter 窗口中的异常?

Selenium 和LINK_TEXT

testing - EvoSuite - 获得最多代码覆盖率的参数

android - Android 预发布期间未测试设备