Есть ли способ ускорить загрузку сервера Selenium Server?
По дизайну, Selenium создает новую копию вашего профиля Firefox каждый раз, когда запускается новый тест. Я считаю, что это время копирования является значительным узким местом, особенно при запуске 100 тестов. (5-15 секунд, чтобы скопировать профиль заново).
Кто-нибудь знает о каком-либо переопределении поведения для этого? Я бы предпочел, чтобы мой сервер Selenium просто повторно использовал один и тот же профиль firefox. Я знаю, что это нарушает философию "чисто настройте ваши тестовые приборы", но это ярлык, который я готов принять, поскольку мои тесты существенно не изменяют мой профиль firefox, чтобы подвергнуть опасности будущие тесты.
Ответы
Ответ 1
Я согласен, что это проблема. Приятно иметь новую копию процесса Firefox каждый раз, но немного перехитрить, чтобы удвоить время запуска, обновив профиль Firefox. Если вы откроете отчет об ошибке http://jira.openqa.org и напишите мне по адресу [email protected] Я буду рад убедиться, что мы получим решение на месте.
PS: Я решил эту проблему как одиночную для себя. Мы используем один и тот же профиль Firefox и просто уничтожаем кеш и файлы cookie. Но я действительно должен просто исправить это изменение обратно к источнику Selenium.
Ответ 2
Это просто вопрос о перемещении кода ниже вне вашей тестовой установки и в настройке прибора и сохранении глобального экземпляра селена (код предполагает NUnit.)
[TestFixtureSetUp()]
public void FixtureSetup()
{
selenium = New DefaultSelenium("localhost", 4444, "*firefox", "http://localhost/");
selenium.Start();
selenium.SetTimeout("30000");
selenium.Open("/");
}
Ваша тестовая установка должна выглядеть примерно так:
[SetUp()]
public void SetUpTest()
{
selenium.Open("default.aspx");
selenium.WaitForPageToLoad("30000");
}
Ответ 3
Одним из небольших способов уменьшить время загрузки профиля является удаление больших файлов из профиля firefox. Для этого настройте свой собственный профиль, выполнив команду firefox.exe -p. После создания профиля перейдите в опции и отключите кеширование и другой пух, который не нужен для веб-тестов. Затем скопируйте свой профиль в новое место и удалите файлы sql, которые не нужны. (иначе, когда вы снова откроете его, вы восстановите удаленные файлы, которые будут очень малыми). Когда вы начинаете тест селена, укажите свой профиль в новом месте. До этого я копировал профиль 50 Мбайт при каждом запуске теста, и теперь он копирует профиль 3-4 МБ, а время запуска почти мгновенно.
Опять же, это не способ снова использовать тот же профиль, но это уменьшит время копирования каждого профиля.
Ответ 4
Используя MSTest, я смог заставить драйвер открыть только одно окно Firefox
для всех тестов, а не открывать и закрывать новое окно для каждого теста, инициализируя WebDriver
в ClassInitialize
(и Cleanup
), а не TestInitialize
:
static string path;
static IWebDriver driver;
static string baseURL;
[ClassInitialize]
public static void ClassInitialize(TestContext context) {
DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory());
path = Path.Combine(di.Parent.Parent.Parent.FullName, "Tests\\bin\\debug\\");
driver = new FirefoxDriver();
baseURL = "http://localhost:5555/";
}
[ClassCleanup]
public static void ClassCleanup() {
driver.Quit();
}
Ответ 5
Хотя это старый вопрос! Сервер Selenium или RC устарел, но эта проблема сохраняется и с Selenium Webdriver.. занимает около 30 секунд, чтобы запустить firefox через webdriver.
Но, как объяснено здесь, некоторые люди обошли это "После отключения неиспользуемых сетевых адаптеров (расположенных в Панели управления\Сеть и Интернет\Сетевые подключения)
он застрял в точке:
ExtensionConnection connection = connectTo(exe.binary, profileToUse, "localhost");
https://groups.google.com/forum/#!topic/selenium-users/a2fNfF-mD_E
Хотя это не сработало для меня, но, конечно, можно попробовать!
Другой способ:
FirefoxProfile profile = new FirefoxProfile();
FirefoxBinary binary = new FirefoxBinary(@"path\to\firefox.exe");
FirefoxDriver driver = new FirefoxDriver(binary,profile);