Дождитесь загрузки страницы в Selenium - PullRequest
216 голосов
/ 03 мая 2011

Как заставить Selenium 2.0 ждать загрузки страницы?

Ответы [ 46 ]

0 голосов
/ 10 апреля 2017

В Python вы можете просто использовать:

driver.implicitly_wait(30)
0 голосов
/ 28 марта 2017

Этот код будет ждать, пока все элементы на странице будут загружены в DOM.

WebDriver driver = new WebDriver();
WebDriverWait wait = new WebDriverWait(driver, timeout);

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*")));
0 голосов
/ 20 мая 2016
  1. WebDriver driver = new ff / chrome / anyDriverYouWish(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); Ожидание максимум 10 секунд.

  2. WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.visibilityOf(WebElement element));

  3. FluentWait<Driver> fluentWait; fluentWait = new FluentWait<>(driver).withTimeout(30, TimeUnit.SECONDS) .pollingEvery(200, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class);

Преимущество последнего варианта заключается в том, что вы можете включить ожидаемое исключение, чтобы ваше выполнение продолжалось.

0 голосов
/ 11 июля 2016

В инструменте тестирования программного обеспечения Webdriver / Selenium 2 доступно 2 типа ожидания.Один из них - неявное ожидание, а другой - явное ожидание.Оба (неявное ожидание и явное ожидание) полезны для ожидания в WebDriver.Используя wait, мы говорим WebDriver подождать некоторое время, прежде чем перейти к следующему шагу. Вы можете использовать неявное ожидание загрузки страницы.

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
0 голосов
/ 24 сентября 2015

Явное и явное ожидание лучше.

Но если вы обрабатываете исключение в Java, вы можете использовать его для ожидания перезагрузки страницы:

Thead.sleep(1000);
0 голосов
/ 28 декабря 2016

используйте следующий код, это очень легко и просто для загрузки страницы.

public void PageLoad(IWebDriver driver, By by)
{
    try
    {
        Console.WriteLine("PageLoad" + by);
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
        wait.Until(ExpectedConditions.ElementIsVisible(by));
        wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); // 30 seconds wait until element not found. 
        wait.Until(ExpectedConditions.ElementToBeClickable(by));


    }
    catch (Exception ex)
    {

        Console.WriteLine(ex.Message);
        Assert.Fail("Element not found!")
    }
}

Надеюсь, это поможет вам.

0 голосов
/ 20 июня 2013
driver.asserts().assertElementFound("Page was not loaded",
By.xpath("//div[@id='actionsContainer']"),Constants.LOOKUP_TIMEOUT);
0 голосов
/ 31 августа 2015

Самый простой способ - просто подождать какой-нибудь элемент, который появится на загруженной странице.

Если вы хотите нажать на какую-то кнопку уже после загрузки страницы, вы можете использовать await и нажать:

await().until().at.most(20, TimeUnit.Seconds).some_element.isDisplayed(); // or another condition
getDriver().find(some_element).click;
0 голосов
/ 23 октября 2016
private static void checkPageIsReady(WebDriver driver) {
    JavascriptExecutor js = (JavascriptExecutor) driver;

    // Initially bellow given if condition will check ready state of page.
    if (js.executeScript("return document.readyState").toString().equals("complete")) {
        System.out.println("Page Is loaded.");
        return;
    }

    // This loop will rotate for 25 times to check If page Is ready after
    // every 1 second.
    // You can replace your value with 25 If you wants to Increase or
    // decrease wait time.
    for (int i = 0; i < 25; i++) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
        // To check page ready state.
        if (js.executeScript("return document.readyState").toString().equals("complete")) {
            break;
        }
    }
}
0 голосов
/ 20 октября 2016

Вы можете попробовать этот код, чтобы страница полностью загрузилась, пока элемент не был найден.

public void waitForBrowserToLoadCompletely() {
    String state = null;
    String oldstate = null;
    try {
        System.out.print("Waiting for browser loading to complete");

        int i = 0;
        while (i < 5) {
            Thread.sleep(1000);
            state = ((JavascriptExecutor) driver).executeScript("return document.readyState;").toString();
            System.out.print("." + Character.toUpperCase(state.charAt(0)) + ".");
            if (state.equals("interactive") || state.equals("loading"))
                break;
            /*
             * If browser in 'complete' state since last X seconds. Return.
             */

            if (i == 1 && state.equals("complete")) {
                System.out.println();
                return;
            }
            i++;
        }
        i = 0;
        oldstate = null;
        Thread.sleep(2000);

        /*
         * Now wait for state to become complete
         */
        while (true) {
            state = ((JavascriptExecutor) driver).executeScript("return document.readyState;").toString();
            System.out.print("." + state.charAt(0) + ".");
            if (state.equals("complete"))
                break;

            if (state.equals(oldstate))
                i++;
            else
                i = 0;
            /*
             * If browser state is same (loading/interactive) since last 60
             * secs. Refresh the page.
             */
            if (i == 15 && state.equals("loading")) {
                System.out.println("\nBrowser in " + state + " state since last 60 secs. So refreshing browser.");
                driver.navigate().refresh();
                System.out.print("Waiting for browser loading to complete");
                i = 0;
            } else if (i == 6 && state.equals("interactive")) {
                System.out.println(
                        "\nBrowser in " + state + " state since last 30 secs. So starting with execution.");
                return;
            }

            Thread.sleep(4000);
            oldstate = state;

        }
        System.out.println();

    } catch (InterruptedException ie) {
        ie.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...