python - 等到元素中的文本被更改
问题描述
请建议 Selenium 是否有一个不错的选择来等到元素内的文本发生更改。条件:
- 页面未自动重新加载
- 动态重新加载我需要的文本的元素
- 更新此数据所需的时间未知
- 预期文本未知。它是一个时间戳。
我编写了一个方法,它每 1 秒(或我设置的任何时间)检查一次,并在更改时获取值。但我认为可能有一些更好的选择。我尽量避免使用 time.sleep,但在目前的情况下,这是我唯一的选择。
请注意,此文本可能会在 5 分钟后更改,因此我需要调整重试次数,retries
或者time.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()
所以你基本上是在等待一个元素停止等于给定值。
PS - 您可以通过更改开发工具中的按钮文本来测试上面的代码片段。
推荐阅读
- sapui5 - 以编程方式将 UI5 控件的 CSS 类绑定到模型值
- c++11 - 在实践中如何使用 C++11 可变参数模板?
- api - Cargowise eAdaptor API 手册 + 与 QlikSense 的集成
- mysql - MySQL:水平到垂直
- python - 基于情景的预期收益和风险设计模型
- javascript - 如何在 Angular 8 中使用转义序列
- python - Python 3.9.5 在 datetime.datetime.now() 中有属性错误。如何解决?
- sql-server - Write-SqlTableData:使用 PowerShell 将 csv 上传到 SQL 服务器时出错
- c# - 如何使用 Windows 应用程序启动和停止 Windows 操作系统中的任何窗口服务
- javascript - 按字母顺序排列数组,然后按大写,然后按小写