Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 等待元素中的文本更改_Python_Selenium_Testing_Automation_Automated Tests - Fatal编程技术网

Python 等待元素中的文本更改

Python 等待元素中的文本更改,python,selenium,testing,automation,automated-tests,Python,Selenium,Testing,Automation,Automated Tests,请建议Selenium是否有一个好的选项,可以等到元素中的文本发生更改。 条件: 页面未自动转写 动态重新加载我需要的文本的元素 更新此数据所需的时间未知 预期文本未知。这是一个时间戳 我编写了一个方法,它每1秒(或我设置的任何时间)检查一次,并在更改时获取值。 但我认为可能有更好的选择。我尽量避免使用time.sleep,但在目前的情况下,这是我唯一的选择。 注意,此文本可能在5分钟后更改,因此我需要调整重试次数重试次数或时间。sleep() 另外,我使用print只是为了调试 def w

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

  • 页面未自动转写
  • 动态重新加载我需要的文本的元素
  • 更新此数据所需的时间未知
  • 预期文本未知。这是一个时间戳
我编写了一个方法,它每1秒(或我设置的任何时间)检查一次,并在更改时获取值。 但我认为可能有更好的选择。我尽量避免使用time.sleep,但在目前的情况下,这是我唯一的选择。 注意,此文本可能在5分钟后更改,因此我需要调整重试次数
重试次数
时间。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}")
def wait_for_文本(驱动程序):
init_text=“init text”
重试=1
重试次数=120次
开始时间=time.time()

重试时,您可以循环,直到文本更改为所需的值

def wait_for_text(driver):  
    init_text = "init text"
    retry = 1
    while(driver.find_element_by_id(".") != init_text ):
        retry += 1
    print(driver.find_element_by_id(".").text)
    print("number of tries: " + retry)

你可以这样做:

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

谢谢,这很好再次感谢,这很有帮助谢谢,如果预期的文本不会出现,这可能是无限的。您可以在while中添加时间条件,否则这应该是您问题的完美答案,因为一旦有了文本,它就会得到文本。