我正在使用Selenium 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浏览器来保存开新的浏览器?这段代码有点沉重吗?
详细信息:使用eclipse尝试使用CentOS盒和Win7盒。 myspeedtest.net显示22Mbps下行和1 Mbps上行。
答案 0 :(得分:10)
您要求的内容(允许WebDriver
附加到正在运行的浏览器)现在已成为almost 3 years的问题。到目前为止,尚未添加此功能。据我所知,没有办法让Firefox加载更快。你可以试试其他一些技巧。
fp.setPreference("webdriver.load.strategy", "unstable")
从this page引用警告:
有一个beta功能让firefox不等待整页 调用.get或.click后加载。这可能导致立即找到 休息,所以请务必使用隐式或显式等待。这个 仅适用于Firefox而非其他浏览器。
您也可以尝试loading with a profile,看看是否有帮助。
答案 1 :(得分:5)
从我在其他地方学到的东西 -
参考文献:
http://www.codeweavers.net/6-ways-to-speed-up-selenium-tests/
http://sauceio.com/index.php/2011/02/speed-up-your-selenium-tests/
希望这有帮助!
答案 2 :(得分:2)
This thread显示了可能的解释。
总而言之,Selenium遍历所有网卡并调用一个花费很长时间用于虚拟网卡的方法(getHostName)。禁用它们解决了线程中OP的问题。
(在我自己的情况下,我无法禁用它们中的任何一个,并且必须在每个测试用例开始时等待...)
答案 3 :(得分:1)
我在Windows中遇到了同样的问题,原因与解决localhost
有关。在这种情况下,有两种解决方法:
将本地主机替换为127.0.0.1(因此请转到http://127.0.0.1
之类的网址)。但是,在使用NTLM身份验证针对Web应用程序进行测试时,这与network.automatic-ntlm-auth.trusted-uris
设置混淆,因为它需要主机名而不是IP地址
更改hosts
(例如C:\ Windows \ System32 \ drivers \ etc)以将localhost直接解析为127.0.0.1:
# localhost name resolution is handled within DNS itself.
127.0.0.1 localhost
# ::1 localhost
答案 4 :(得分:0)
我意识到这个问题已经得到了回答,但我希望这可以帮助任何有同样问题的人。
如果你需要做的就是截取屏幕截图。我推荐使用Awesomium.NET。 http://awesomium.com/
在C#而不是Java中执行此操作不应该是一个主要的难题,因为它们具有相似的语法。如果要在Linux上运行应用程序,它还支持C ++。我认为它会比WebDriver快得多。
如果选择C ++,请使用此选项:http://labs.awesomium.com/capturing-web-pages-with-c/
答案 5 :(得分:0)
对我而言,它适用于64位版本的IEDriverServer, 我添加了属性requireWindowFocus,其值为:" true"。
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
capabilities.setCapability("requireWindowFocus", true);
WebDriver driver = new InternetExplorerDriver(capabilities);