我使用webdriver的硒采取的网页截图。 它运行伟大。 然而,从我打在Eclipse中的截图在我的本地驱动器显示的时间运行时间为7-10秒。 大多数延迟似乎是在启动Firefox。
码:
WebDriver driver = new FirefoxDriver();
driver.get("http://www.cnn.com");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\test\\screenshot.png"));
我怎样才能加速这一进程? 有没有我可以使用一个已经打开的Firefox浏览器,以节省打开一个新的方式? 这是代码以某种方式重?
详细说明:试图在CentOS盒和Win7箱都使用eclipse。 myspeedtest.net展示22Mbps的降低和1 Mbps的了。
你所要求(允许WebDriver
附加到一个正在运行的浏览器)一直是一个问题,现在快3年了 。 到目前为止,这个功能仍然没有被添加。 据我所知,有没有办法让Firefox加载得更快。 你可以试试虽然一些其他的技巧。
fp.setPreference("webdriver.load.strategy", "unstable")
报价从警告此页 :
有测试功能,让Firefox不等待完整页面调用。获得或之后。点击加载。 这可能会导致立即找到的突破,因此请务必使用一个隐性或显性等待太久。 这仅适用于Firefox和不是其他浏览器。
您也可以尝试加载与配置文件 ,看看有没有什么帮助的。
从我在其他地方学到的东西 -
- 关闭自动更新您的浏览器/插件
- 设置你的IIS(或同等学历)的应用程序超时为零
- 创建基础硒夹具在测试中使用
- 更新到硒的最新版本
- 温暖你的应用程序之前测试
- 短期测试
- 预填充饼干。
参考文献:
https://sqa.stackexchange.com/questions/1988/selenium-reuse-existing-browser-session-instead-of-opening-new-windows
http://www.codeweavers.net/6-ways-to-speed-up-selenium-tests/
http://sauceio.com/index.php/2011/02/speed-up-your-selenium-tests/
希望这可以帮助!
此线程显示了一个可能的解释。
总之,硒遍历所有的网卡,并调用需要很长的时间,虚拟网络名片的方法(的gethostname)。 禁用它们解决了线程OP的问题。
(就我自己来说,我无法禁止任何人,必须等到在每个测试用例的开始...)
我有同样的问题在Windows和原因是有关解决localhost
。 在这种情况下,有两种方法来解决这个问题:
替换127.0.0.1本地主机(所以去的URL像http://127.0.0.1
)。 然而,这与食堂network.automatic-ntlm-auth.trusted-uris
使用NTLM身份验证对Web应用程序进行测试时的设置,因为它需要一个主机名,而不是IP地址
改变hosts
(如C:\ WINDOWS \ SYSTEM32 \ drivers \ etc下),直接解决了本地主机为127.0.0.1:
# localhost name resolution is handled within DNS itself. 127.0.0.1 localhost # ::1 localhost
我知道这个问题已经回答了,但我希望这可以帮助有同样问题的人。
如果你需要做的是采取截图。 我建议使用Awesomium.NET。 http://awesomium.com/
在C#中,而不是Java这样做不应该是一个大难题,因为它们具有类似的语法。 它也支持C ++,如果你想运行在Linux上的应用程序。 我相信它会比webdriver的显著更快。
如果你选择C ++使用此: http://labs.awesomium.com/capturing-web-pages-with-c/
对于C#.NET: http://awesomium.com/docs/1_7_rc3/sharp_api/
对我来说,与IEDriverServer的64位版本的工作,我加了属性requireWindowFocus与价值:“真”。
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
capabilities.setCapability("requireWindowFocus", true);
WebDriver driver = new InternetExplorerDriver(capabilities);