我正在使用selenium webdriver在我的测试用例中创建屏幕截图,虽然这些确实显示了我的Web应用程序中可见的内容,但它没有显示浏览器创建的弹出窗口。
我发现在某些情况下在IE浏览器中,我的应用程序在IE中触发了JS调试弹出窗口。这当然是一个错误,并打破了我的测试的其余部分,但屏幕截图没有显示错误。我认为这是因为它是一个IE本机弹出窗口,而不是我的应用程序的一个触发器。
是否可以将其包含在屏幕截图中?我想可能使用Robot#createScreenCapture()
创建屏幕截图,但显然如果浏览器最小化则不会显示任何有用的内容。
所以,一些可能的解决方案: - 您可以检测是否在浏览器中弹出错误消息 - 运行时是否可以最大化/集中浏览器? - 你可以用弹出窗口显示来自selenium的截图吗?
答案 0 :(得分:1)
Selenium将截取代表渲染的DOM的屏幕截图,浏览器通过拦截浏览器正在显示的渲染图像并获取其副本来显示最终用户。
它不需要桌面截图,因此显示的屏幕截图不会显示任何覆盖浏览器窗口的内容。 JavaScript警报不是渲染DOM的一部分,因此您不会在Selenium屏幕截图中看到这些。
答案 1 :(得分:0)
可能是因为驱动程序没有激活警报/窗口?
您可以尝试这样的事情:
private void CheckForOtherWindows()
{
//Check for any other window open
if (driver.WindowHandles.Count > 0)
{
foreach (string window in driver.WindowHandles)
{
driver.SwitchTo().Window(window);
TakeScreenshot();
}
}
//Check for alert window
try
{
driver.SwitchTo().Alert();
TakeScreenshot();
}
catch
{
//Nothing
}
}
这未经过测试,不确定是否有效。只是提出这个想法。 :)
编辑: 最大化窗口很容易:
driver.Manage().Window.Maximize();
希望它有所帮助。
答案 2 :(得分:0)
您可以使用以下方法:
FileUtils.copyFile(((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE), new File("E:\\ScreenShot\\screenshot.png"));