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