使用场景:项目中用selenium驱动chrome在网页中登录,但是登录有图形验证码,想刷新验证码时,模拟点击图片刷新,但是由于点击后图片是异步加载,所以无法得知新图片什么时候加载完成,就用wait等待3s后,再截返回图验证码图片.但是这样刷新验证码很慢,体验不好.
解决思路:打开一个新标签页,然后get请求图片验证码url.再截返回图验证码图片.由于get是阻塞的,所以不用判断图片加载状态问题.
编码设置:
/**
* 刷新图形验证码,通过在新标签get方式(同步)获取图形验证码,达到实时响应效果
* @param imageUrl
* @return BufferedImage
*/
public BufferedImage getRefreshImage(String imageUrl){
lastUpdateTime = System.currentTimeMillis();
BufferedImage image = null;
WebDriver newWindowDriver = null;
//打开新标签
this.executeScript("window.open(‘data:,‘)");
//获取所有标签
ArrayList<String> tabs = new ArrayList<String> (this.driver.getWindowHandles());
try {
//切换到新标签
newWindowDriver = this.driver.switchTo().window(tabs.get(1));
//在新标签中打开图片
newWindowDriver.get(imageUrl);
//获取截图
image = SeleniumTools.getElementImage(newWindowDriver, By.tagName("img"));
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭新标签页
if (newWindowDriver != null) newWindowDriver.close();
//切换到原页面
this.driver.switchTo().window(tabs.get(0));
}
return image;
}