如何在 Selenium 中等待页面刷新

Posted

技术标签:

【中文标题】如何在 Selenium 中等待页面刷新【英文标题】:How do I wait for a page refresh in Selenium 【发布时间】:2017-05-06 14:17:08 【问题描述】:

这是我上一个问题Unable to understand on getting the value的扩展

这里的情况如下。

根据邮政编码,结果会有所不同。

目前我的文件中有以下内容。

99546
60089

我的代码如下。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Test1 
    public static void main(String[] args) throws InterruptedException, FileNotFoundException 
        WebDriver driver;
        System.setProperty("webdriver.gecko.driver", "C:\\Users\\home\\Downloads\\geckodriver.exe");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        driver = new FirefoxDriver(capabilities);
        driver.get("https://www2.chubb.com/us-en/find-agent-page.aspx");

        try 
            File file = new File("zip.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuffer stringBuffer = new StringBuffer();
            String line;
            while ((line = bufferedReader.readLine()) != null) 
                driver.findElement(By.xpath(".//*[@id='tbAddress']")).clear();
                driver.findElement(By.xpath(".//*[@id='cphHeroContent_drpDistanceMiles']")).sendKeys("Select Distance");

                driver.findElement(By.xpath(".//*[@id='tbAddress']")).sendKeys(line);
                driver.findElement(By.xpath(".//*[@id='cphHeroContent_drpDistanceMiles']")).sendKeys("2");
                driver.findElement(By.xpath(".//*[@id='cphHeroContent_rdType_0']")).click();

                driver.findElement(By.xpath(".//*[@id='cphHeroContent_btnSearch']")).click();

                String title = driver.getTitle().toString();
                System.out.println(title);



                WebElement element = (new WebDriverWait(driver, 10)).until(
                        ExpectedConditions.visibilityOfElementLocated(By.xpath("html/body/div/div[1]/div[@style='']")));

                String getHeadingTitle = element.getText();

                System.out.println(line + "\t" + getHeadingTitle);

            
            fileReader.close();
            System.out.println("Contents of file:");
            System.out.println(stringBuffer.toString());
         catch (IOException e) 
            e.printStackTrace();
        

    

预期结果:

99546   No Results Found
Find Agent Page
60089   1 Agents Found. Please scroll down to see a list of agents.

当前结果:

99546   No Results Found
Find Agent Page
60089   No Results Found

问题: 我正在使用下面的代码。

WebElement element = (new WebDriverWait(driver, 10)).until(
                            ExpectedConditions.visibilityOfElementLocated(By.xpath("html/body/div/div[1]/div[@style='']")));

最初,这个块是隐藏的,所以我一直等到它可见,从第二次开始,同一个块得到更新,而不是变得不可见并重新可见。 这是在第一次提交时从上一次提交中检索到的值。 请告诉我如何获取更新后的值。

谢谢

【问题讨论】:

我认为您可以使用 Thread.sleep(4000) 方法暂停几秒钟(这不是正确的解决方案)因此您可以通过在脚本中暂停来获取文本。 【参考方案1】:

这个问题的最佳答案在这里:https://***.com/a/32278904/349169

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"));

【讨论】:

【参考方案2】:

也许,您可以通过断言最初存在于页面上的元素在刷新后立即不存在于页面上来解决此问题

refreshAndWait 或 clickAndWait 刷新按钮

assertElementNotPresent page_specific_element -> 检查刷新 真的被处决了

暂停 3000 毫秒 -> 等待刷新结束

assertElementPresent page_specific_element -> 检查是否刷新

真正执行并加载了相同的页面

【讨论】:

以上是关于如何在 Selenium 中等待页面刷新的主要内容,如果未能解决你的问题,请参考以下文章

处理来自 selenium 的自刷新页面

Selenium-IDE:如何验证/断言页面刷新

如何使用 selenium webdriver 进行强制页面刷新?

Python,Selenium:如何刷新页面直到元素存在

如何使用 Selenium 进行硬刷新

selenium 刷新页面