11

我正在使用 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 浏览器来节省打开新浏览器的费用?这段代码有点重吗?

详细信息:在 CentOS 盒子和 Win7 盒子上都使用 eclipse 进行了尝试。myspeedtest.net 显示 22Mbps 下降和 1 Mbps 上升。

4

6 回答 6

11

您所要求的(允许WebDriver附加到正在运行的浏览器)已经成为近 3 年的问题。迄今为止,该功能仍未添加。据我所知,没有办法让 Firefox 加载速度更快。不过,您可以尝试其他一些技巧。

fp.setPreference("webdriver.load.strategy", "unstable")

引用此页面的警告:

有一个 beta 功能可以让 firefox 在调用 .get 或 .click 后不等待整个页面加载。这可能会导致立即查找中断,因此请务必使用隐式或显式等待。这仅适用于 Firefox,不适用于其他浏览器。

您也可以尝试加载配置文件,看看是否有帮助。

于 2012-10-22T22:36:54.757 回答
5

从我在别处学到的东西——

  1. 关闭浏览器/插件的自动更新
  2. 将您的 IIS(或等效)应用程序超时设置为零
  3. 创建用于测试的基本 Selenium Fixture
  4. 更新到最新版本的 Selenium
  5. 在测试之前预热您的应用程序
  6. 短期测试
  7. 预填充 cookie。

参考:

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/

希望这可以帮助!

于 2012-10-23T11:37:17.890 回答
2

这个线程显示了一个可能的解释。

综上所述,Selenium 循环遍历所有网卡,调用一个方法(getHostName),虚拟网卡耗时较长。禁用它们解决了线程中 OP 的问题。

(在我自己的情况下,我无法禁用它们中的任何一个,并且必须在每个测试用例开始时等待......)

于 2014-01-30T15:58:26.213 回答
1

我在 Windows 中遇到了同样的问题,原因与解决localhost. 在这种情况下,有两种方法可以修复它:

  • 用 127.0.0.1 替换 localhost (所以转到 url 之类的http://127.0.0.1)。但是,network.automatic-ntlm-auth.trusted-uris在使用 NTLM 身份验证对 Web 应用程序进行测试时,这会与设置混淆,因为它需要主机名,而不是 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
    
于 2019-01-18T13:31:34.550 回答
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/

于 2012-11-03T03:45:53.070 回答
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);
于 2016-02-17T10:09:40.080 回答