Как ждать в Селене Java, пока все изображения на веб-страницах не будут загружены правильно - PullRequest
0 голосов
/ 17 февраля 2019

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

Хотя я думаю, что решение уже доступно при переполнении стека, но ни одно из них не работает для меня.самое близкое решение, которое я нашел здесь: Подождите, пока изображение будет полностью загружено Selenium WebDriver

, однако в этом коде и аргументе, написанном в исполнителе javascript, не возвращается логический вывод, и поэтомуэто выдает мне ошибку.

Следующий код, который я использую, но он дает мне ошибку времени компиляции, так как «Несовместимые типы операндов Object и int» с использованием equals также не работает для меня здесь

 waitexternal.until(new Function<WebDriver, Boolean>(){
    @Override
    public Boolean apply(WebDriver ldriver) {
        ldriver = driver;
        JavascriptExecutor js = (JavascriptExecutor) driver;  

        return js.executeScript("return jQuery.active") == 0;

        //return (js.executeScript("return arguments[0]").equals("complete"));
        }
    }

   );

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете идентифицировать все изображения на текущей странице, используя document.images.Вы можете проверить, сколько изображений есть на текущей странице, используя document.images.length.

. Чтобы проверить, правильно ли загружены эти изображения, вы можете применить свойство complete к каждому изображению, например document.images[0].complete, котороевернет true, если изображение загружено, иначе false.

Here the proof

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

// Launching the browser
driver.get("http://www.google.com");

// Declaring and Casting driver to JavaScriptExecutor
JavascriptExecutor jse = (JavascriptExecutor) driver;
// Getting DOM status
Object result = jse.executeScript("return document.readyState;");
System.out.println("=> The status is : "+result.toString());
// Checking DOM loading is completed or not?
if(result.equals("complete")) {
    // Fetching images count
    result = jse.executeScript("return document.images.length");
    int imagesCount = Integer.parseInt(result.toString());
    boolean allLoaded = false;
    // Checking and waiting until all the images are getting loaded
    while(!allLoaded) {
        int count = 0;
        for(int i=0;i<imagesCount;i++) {
            result = jse.executeScript("return document.images["+i+"].complete;");
            boolean loaded = (Boolean) result;
            if(loaded) count++;
        }
        // Breaking the while loop if all the images loading completes
        if(count == imagesCount) {
            System.out.println("=> All the Images are loaded...");
            break;
        } else {
            System.out.println("=> Not yet loaded...");
        }
        Thread.sleep(1000);
    }
}

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

Чтобы проверить, загружен определенный элемент или нет, вы можете сделать следующее:

// To check a particular element is loaded or not?
WebElement googleLogo = driver.findElement(By.id("hplogo"));
boolean loaded = (Boolean) jse.executeScript("return arguments[0].complete;", googleLogo);
System.out.println("The google logo is loaded ? "+loaded);

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

// To check a particular element is loaded or not?
WebElement googleLogo = driver.findElement(By.id("hplogo"));
while(!(Boolean) jse.executeScript("return arguments[0].complete;", googleLogo)) {
    System.out.println("=> The google logo is not yet loaded...");
    Thread.sleep(1000);
}
System.out.println("The google logo is loaded... ");

Чтобы узнать больше о командах JavaScript и JavaScriptExecutor, проверьте и подпишитесь на этот канал

Источник: Коллекция HTML DOM-изображений Документnt.images

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

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