Selenium WebDriver работает, но медленно (Java)

Я использую 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:testscreenshot.png"));

Как я могу ускорить этот процесс? Есть ли способ, которым я могу использовать уже открытый браузер Firefox, чтобы сэкономить при открытии нового? Этот код какой-то тяжелый?

подробности: примерено CentOS box и Win7 box используют eclipse. myspeedtest.net показывает 22 Мбит / с и 1 Мбит / с ВВЕРХ.

5 ответов


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

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

со ссылкой на предупреждение от на этой странице:

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

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


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

  1. выключите автоматические обновления для Вашего браузера / плагинов
  2. установите таймауты IIS (или эквивалентные) приложения на ноль
  3. создайте базовое приспособление Селена для использования в ваших тестах
  4. обновление до последней версии Selenium
  5. разогреть приложения до тестирования
  6. короткие тесты
  7. предзаполнить cookies.

ссылки:

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/

надеюсь, что это помогает!


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

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

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


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

Если все, что вам нужно сделать, это делать скриншоты. Я рекомендую использовать 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/


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