Selenium webdriver 2.47.1如何等待页面重新加载

时间:2015-08-28 18:55:53

标签: java selenium-webdriver

我正在使用webdriver(java)进行一项独特的测试,当你登录时页面会重新加载,我一直无法等待元素加载,因为它在重新加载之前已经存在。到目前为止,我能够让它工作的唯一方法是使用thread.sleep,有没有办法监听页面刷新?

2 个答案:

答案 0 :(得分:5)

解决此问题的一种方法是,获取对所需元素的引用,该引用同时出现在登录页面和重新加载的页面上。 然后,您可以使用ExpectedConditions.stalenessOf,然后您可以确定,该元素已从DOM中删除并创建了一个新元素。好吧,这个方法无法保证最后一部分,但至少你知道旧元素已经消失了。

代码看起来像这样:

WebElement elementOldPage = driver.findElement(By.id("yourid"));

... do login etc ...

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.stalenessOf(elementOldPage));

WebElement elementNewPage = driver.findElement(By.id("yourid"));

答案 1 :(得分:0)

以 Kim Schiller 的 accepted answer 为基础,您可能会对以下代码感兴趣。由于睡眠,它肯定不完美,所以请随意提出改进建议以使其更防弹。另请注意,我不是硒方面的专家。

if 分支等待 html 中的顶级节点在页面重新加载的情况下过时。 else 分支只是等待驱动程序 url 与请求 url 匹配,以防我们加载不同的页面。

def safe_page_load(url):
    if driver.current_url == url:
        tmp = driver.find_element_by_xpath('/html')
        driver.get(url)
        WebDriverWait(driver, 2).until(ExpectedConditions.staleness_of(tmp))
    else:
        driver.get(url)
        while(driver.current_url) != url:
            sleep(0.3)
    sleep(0.3)

如果我能帮助别人,我很高兴。