Как мне сказать Selenium ждать, пока отчет не будет готов к загрузке? - PullRequest
0 голосов
/ 25 января 2020

После выбора даты из средства выбора даты, нажмите кнопку «Просмотреть отчет», затем потребуется время, чтобы сгенерировать отчет, а затем загрузить отчет. Мой следующий код работает без ошибок, но как мне это сделать? используйте плавное ожидание вместо Thread.sleep (20000) (последняя строка кода ниже). Для свободного или явного ожидания я прошу подождать, при каких условиях? Также хотел проверить, был ли файл загружен или нет с утверждением. Любая помощь будет оценена.

public void generateReport() throws Exception {
        clickDatePicker.click();
        log.info("Select the Date from datepicker");
        Select month = new Select(selectMonth);
        month.selectByValue("0");
        log.info("Selected the Month from datepicker");
        Select year = new Select(selectYear);
        year.selectByValue("2020");
        log.info("Selected the Year from datepicker");
        act.moveToElement(selectDate).click().build().perform();
        buttonViewReport.click();
        log.info("Finally clicked on Get Report button ");
        Thread.sleep(20000);        
        }

Ответы [ 2 ]

0 голосов
/ 25 января 2020

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

WebDriverWait wait=new WebDriverWait(driver, 20000); 
wait.until(ExpectedConditions.numberOfElementsToBe(locator, number));

, где 20000 - время в миллисекундах

0 голосов
/ 25 января 2020

Проверьте приведенный ниже метод, чтобы убедиться, что сценарий будет ожидать начала загрузки (максимум минут, указанных в вызове метода)

    public void waitUntilDownloadStarted(WebDriver driver, int maxWaitTimeInMinutes) throws InterruptedException {
        // Store the current window handle
        String mainWindow = driver.getWindowHandle();

        // open a new tab
        JavascriptExecutor js = (JavascriptExecutor)driver;
        js.executeScript("window.open()");
        // switch to new tab
        // Switch to new window opened
        for(String winHandle : driver.getWindowHandles()){
            driver.switchTo().window(winHandle);
        }
        // navigate to chrome downloads
        driver.get("chrome://downloads");
        Instant startTime = Instant.now();

        int elapsedTime = (int) Duration.between(startTime, Instant.now()).toMinutes();
        // wait until the download is started
        while ( (Long)js.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelectorAll('#downloadsList downloads-item').length") == 0) {
            Thread.sleep(1000);
            elapsedTime = (int) Duration.between(startTime, Instant.now()).toMinutes();
            if  (elapsedTime > maxWaitTimeInMinutes) {
                break;
            }

        }
        // close the downloads tab2
        driver.close();
        // switch back to main window
        driver.switchTo().window(mainWindow);
    }

Протестировано, как показано ниже.

waitUntilDownloadStarted(driver, 10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...