当所有图像完全加载到网页时,我正在尝试截取该网页的屏幕截图。
尽管我认为该解决方案在堆栈溢出时已经可用,但是没有一个对我有用。我找到的最接近的解决方案是在这里:Wait for an image to be fully loaded Selenium WebDriver
但是在这段代码中,用javascript executer编写的arg不返回布尔输出,这就是为什么它给我一个错误。
以下代码正在使用,但在我的编译时错误中给出为“不兼容的操作数类型对象和 int”在这里对我也无效
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"));
}
}
);
答案 0 :(得分:3)
您可以使用document.images
识别当前页面中的所有图像。您可以使用document.images.length
检查当前页面中有多少张图片。
要检查这些图像是否正确加载,可以在每个图像上应用complete
属性,例如document.images[0].complete
,如果图像被加载,则该属性将返回true,否则将返回false。
下面的代码将首先检查是否加载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的更多信息,请签出并订阅this channel
来源:HTML DOM images Collection,Document.images
希望对您有帮助...