selenim java判断图片有没有加载完成

Selenium WebDriver默认仅检查DOM中是否存在image标签,但无法判断图片是否真正可见或加载失败。为检测图片是否可见,可以利用JavaScript的naturalWidth属性,如果其值大于0,则表明图片已加载。解决方案参考了sqa.stackexchange和watirmelon的相关讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebDriver只会检查DOM中是否有image 标记,而不能检查这个图片是否不可见或者坏掉。

检查图片是否可见,可通过检查javascript属性naturalWidth是否大于0

	
@Test
public void Test1() throws Exception{
...
			WebElement image=driver.findElement(By.cssSelector("div.img-wrapper>img"));
			boolean isVisible=this.IsImageVisible(driver, image);
			if(isVisible){
				driver.findElement(By.cssSelector("span.img-next > span.img-switch-btn")).click();
				driver.switchTo().defaultContent();
				System.out.println("----navigate to the next img");
			}
...
}

public boolean IsImageVisible(WebDriver driver,WebElement image){
		Boolean imageLoaded1 = (Boolean) ((JavascriptExecutor)driver).executeScript("return arguments[0].complete && typeof arguments[0].naturalWidth != \"undefined\" && arguments[0].naturalWidth > 0", image); 
		if (!imageLoaded1) 
		{ 
			MyLog.logger.info("----Image is not present.-----"); 
			return false;
		} 
		else 
		{ 
			MyLog.logger.info("----image is visible.----"); 
		}
		return true;
	}

主要是参考

http://sqa.stackexchange.com/questions/12912/how-to-check-is-image-is-loaded-or-not-in-selenium

http://watirmelon.com/2012/11/27/checking-an-image-is-actually-visible-using-webdriver/



### Java Selenium 页面加载完成检测方法 在使用 Selenium 进行自动化测试或爬取动态网页时,确保页面完全加载是一个重要的前提条件。以下是几种常见的用于检测页面加载完成的方法: #### 方法一:显式等待特定元素 通过 `WebDriverWait` 和 `ExpectedConditions` 来设置显式等待,直到目标元素可见或可交互为止。 ```java import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class PageLoadExample { public static void waitForElement(WebDriver driver, By locator, int timeoutInSeconds) { WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds); WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(locator)); } } ``` 这种方法适用于已知需要等待的具体元素的情况[^3]。 --- #### 方法二:JavaScript 执行状态检查 可以通过执行 JavaScript 脚本来获取文档的加载状态 (`document.readyState`) 并判断其是否为 `"complete"`。 ```java import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; public class JsPageLoadCheck { public static boolean isPageLoaded(WebDriver driver) { JavascriptExecutor js = (JavascriptExecutor) driver; String state = (String) js.executeScript("return document.readyState;"); return "complete".equalsIgnoreCase(state); } } ``` 当返回值为 `"complete"` 时表示整个页面及其资源均已加载完毕。 --- #### 方法三:监听图片或其他异步资源加载 如果页面中有大量图片或其他异步加载的内容,则可以进一步确认这些资源的状态。例如,对于单张或多张图片,可通过以下方式实现: ```java import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; public class ImageLoadChecker { public static boolean areImagesLoaded(WebDriver driver) { JavascriptExecutor js = (JavascriptExecutor) driver; Long imagesCount = (Long) js.executeScript( "var imgs = document.images;" + "for(var i=0;i<imgs.length;i++){" + "if(!imgs[i].complete || typeof(imgs[i].naturalWidth)==\"undefined\" || imgs[i].naturalWidth==0)" + "return false;" + "} return true;" ); return imagesCount != null && imagesCount.equals(1L); // 返回true表示所有图片均成功加载 } } ``` 此脚本遍历 DOM 中所有的 `<img>` 标签并验证它们是否已完成加载以及宽度是否有效[^4]。 --- #### 综合方案 为了更可靠地检测页面加载完成情况,通常建议结合上述多种技术手段。例如,在初始化阶段先利用 JavaScript 检查整体加载状态;随后再针对某些关键组件(如表单字段、按钮或者图像)应用显式等待策略。 --- #### 注意事项 - 如果遇到 AJAX 请求频繁触发更新的情形,可能还需要额外处理此类场景下的数据同步逻辑。 - 不同浏览器可能存在细微差异,请务必充分测试所选方案的实际效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值