首页 > 解决方案 > 等到元素中的文本被更改

问题描述

请建议 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}")

标签: pythonseleniumtestingautomationautomated-tests

解决方案


你可以这样做:

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 - 您可以通过更改开发工具中的按钮文本来测试上面的代码片段。


推荐阅读