Selenium WebDriver可以工作但是SLOW(Java)

时间:2012-10-22 22:25:59

标签: selenium webdriver screenshot selenium-webdriver

我正在使用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上行。

6 个答案:

答案 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)

从我在其他地方学到的东西 -

  1. 关闭浏览器/插件的自动更新
  2. 将您的IIS(或同等)应用超时设置为零
  3. 创建一个用于测试的基础Selenium Fixture
  4. 更新到最新版本的Selenium
  5. 在测试之前预热您的应用
  6. 简短测试
  7. 预先填充Cookie。
  8. 参考文献:

    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/

    希望这有帮助!

答案 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/

对于C#.NET:http://awesomium.com/docs/1_7_rc3/sharp_api/

答案 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);