Selenium WebDriver работает, но SLOW (Java)

Я использую Selenium WebDriver, чтобы сделать скриншот веб-страниц. Он отлично работает. Однако с тех пор, как я попал в затмение до момента появления скриншота на моем локальном диске, 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 показывает 22 Мбит/с и 1 Мбит/с.

Ответ 1

То, что вы запрашиваете (позволяя WebDriver прикрепляться к запущенному браузеру), теперь было проблемой для почти 3 года. На сегодняшний день эта функция еще не добавлена. Насколько мне известно, ускорить загрузку Firefox невозможно. Однако вы можете попробовать еще несколько трюков.

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

Цитата из эта страница:

Существует функция бета-функции, которая заставит firefox не дожидаться полной страницы загрузить после вызова .get или .click. Это может привести к немедленному обнаружению break, поэтому, пожалуйста, обязательно используйте неявное или явное ожидание. Эта доступен только для Firefox, а не для других браузеров.

Вы также можете попробовать загрузку с профилем и посмотреть, помогает ли это вообще.

Ответ 2

Из того, что я узнал в другом месте -

  • Отключить автоматические обновления для вашего браузера/плагинов
  • Установите тайм-ауты приложения IIS (или эквивалентные) для приложения
  • Создайте базовое Selenium Fixture для использования в ваших тестах.
  • Обновление до последней версии Selenium
  • Разогрейте свои приложения перед тестированием
  • Короткие тесты
  • Предварительно заполнить файлы 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/

Надеюсь, это поможет!

Ответ 3

Этот поток показывает возможное объяснение.

Подводя итог, Selenium перебирает все сетевые карты и вызывает метод (getHostName), который занимает много времени для виртуальных сетевых карт. Отключение их решало проблему OP в потоке.

(В моем случае я не могу отключить ни одного из них и должен ждать в начале каждого тестового примера...)

Ответ 4

Я понимаю, что на этот вопрос уже был дан ответ, но я надеюсь, что это поможет любому, у кого есть такая же проблема.

Если вам нужно всего лишь сделать скриншоты. Я рекомендую использовать Awesomium.NET. http://awesomium.com/

Выполнение этого в С#, а не в Java, не должно быть серьезной проблемой, так как они имеют похожий синтаксис. Он также поддерживает С++, если вы хотите запустить приложение в Linux. Я предполагаю, что он будет значительно быстрее, чем WebDriver.

Используйте это, если вы выберете С++: http://labs.awesomium.com/capturing-web-pages-with-c/

Для С#.NET: http://awesomium.com/docs/1_7_rc3/sharp_api/

Ответ 5

Для меня это работало с 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);

Ответ 6

У меня была та же проблема в Windows, и причина была связана с разрешением localhost. В этом случае есть два способа это исправить:

  • замените localhost на 127.0.0.1 (поэтому перейдите по ссылкам типа http://127.0.0.1). Однако это network.automatic-ntlm-auth.trusted-uris настройке network.automatic-ntlm-auth.trusted-uris при тестировании веб-приложения с использованием аутентификации NTLM, так как для этого требуется имя хоста, а не 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