我在我的框架中使用了selenium webdriver(在我的ubuntu 14.04中使用版本2.45.0和FFv38.0.5),它访问了一些url以检查其可用性并返回屏幕截图和一些数据。如果页面向上或向下都很好,我可以获得所有数据和屏幕截图,但问题是当页面超时时,selenium无法捕获屏幕截图并抛出异常。我尽力找到从timedout页面获取屏幕截图的一些方法,但这就是为什么我在这里发布它作为最后的手段。我的代码如下,
driver = new FirefoxDriver(fbp, profile, desiredCapabilities);
driver.manage().timeouts().pageLoadTimeout(loadTimeout , TimeUnit.SECONDS);
try {
driver.get(url);
} catch (Exception e) {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("path-to-png"));
}
我得到的例外是
Could not take screenshot of current page - Error: Page is not loaded yet, try later
Command duration or timeout: 7 milliseconds
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04 16:17:10'
System info: host: 'santhosh-2840', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-37-generic', java.version: '1.7.0_65'
Session ID: a0754b4f-ff3a-4ee1-8ace-6886eaa958b1
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=38.0.5}]
无论如何从selenium获取时间轴页面的截图吗?
p.s:我知道timedout页面上没有任何dom内容,selenium将获取内容长度来计算其截图大小,不知怎的,我还需要获取timedout页面的截图。
TIA
答案 0 :(得分:1)
运行代码和页面超时时会出现什么错误?
我认为您必须专门捕获TimeoutException
:
private void takeScreenshot() {
try {
File source = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
path = "./path/to/screenshots/screenshot.png";
source.setWritable(true);
if(source.canWrite()) {
FileUtils.copyFile(source, new File(path));
}
} catch(IOException e) {
// ...
} catch(Exception e) {
// ...
}
}
...
try {
driver.get(url);
} catch (TimeoutException e) {
takeScreenshot();
}
这适合我。