屏幕捕获似乎是IE 10的问题?

时间:2014-08-05 11:34:51

标签: java selenium webdriver internet-explorer-10

我在本地计算机上捕获屏幕截图时遇到问题。我使用FF和IE10,对于FF一切正常,屏幕截图被全屏窗口捕获。 对于IE10,我得到页面下半部分的黑色,看起来它与滚动有关,只要页面中有滚动,就会看到黑条,否则不会。我怀疑是时间问题,IE可能需要更长的时间来捕获整个页面。

我有以下捕获代码:

public static void takeScreenshot(String filename) 
{
     WebDriver augmentedDriver = new Augmenter().augment(AbstractTest.driver);
     File screenshotFile=((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE);
     try 
     {
        FileUtils.copyFile(screenshotFile, new File(getScreenshotsDir() + filename));
     } 
     catch (IOException e) 
     {
        System.out.println("Cannot capture sreenshot." + e.getMessage());
     }
}

似乎我遇到了与此处所述完全相同的问题: http://selenium.10932.n7.nabble.com/TakeScreenshot-from-Augmenter-RemoteWebdriver-gets-window-only-for-IE-10-others-get-entire-page-td18063.html

3 个答案:

答案 0 :(得分:0)

FF的DOM加载比IE快得多。对于IE,请等待文档使用JS进入就绪状态。

do
{
   // sleep for few milliseconds.
} while ((string)ie.ExecuteScript("return document.readyState") != "complete");

(使用C#编码 - 伪代码,未编译)

答案 1 :(得分:0)

您还没有说过您正在使用哪个版本的IEDriverServer.exe,但是我将使用我的通灵调试功能来猜测您是否正在使用32位版本在64位版本的Windows上运行的可执行文件。如果您正在使用32位版本的IEDriverServer.exe,那么您遇到的问题是IE 10或更高版本的已知问题。该问题已在issue #5876 in the Selenium project issue tracker中详细记录。该问题报告中评论的操作信息:

  

在64位版本的Windows上运行IE 10或更高版本时,   默认情况下,托管包含的包含窗口的进程   浏览器chrome(地址栏,导航按钮,菜单等)是一个   64位进程。托管内容所在窗口的过程   实际呈现(在每个选项卡中)是一个32位进程。

     

默认情况下,IE驱动程序必须在顶层使用Windows挂钩   窗口允许浏览器调整大小足以显示   整页画布。这就是问题所在。窗户挂钩是   未安装,因为64位进程(顶级窗口进程)   不能执行32位代码(32位的Windows钩子代码)   IEDriverServer.exe)。正确解决这个问题的唯一方法是   创建第二个(64位)可执行文件以执行窗口大小调整。

不幸的是,任何修复此问题的尝试都会涉及IE驱动程序本身的大规模重新架构,因此没有时间表进行修复。

作为旁注,很有可能说#34;将64位IEDriverServer.exe用于64位操作系统,"但那有自己的问题。 sendKeys发生同样的问题(32位可执行文件不能执行64位代码,反之亦然),反之亦然。使用sendKeys也需要一个窗口挂钩,但挂钩到客户端呈现过程,即使对于64位IE,它通常也是一个32位进程。因此,对于64位IE驱动程序,它的挂钩不会安装到32位进程中,sendKeys需要花费大量时间才能工作,大约5秒对于每一次击键。

答案 2 :(得分:-1)

我在IE中长时间使用同样的问题(ff和chrome都很好) 几天前我刚开始从我的集线器到我的节点机器的远程桌面连接......魔术,现在一切看起来都很好:-)

你怎么看?