Использование определенного профиля Firefox в Selenium WebDriver в С#
Я пытаюсь использовать профиль, который я уже настроил для firefox с selenium 2, но нет документации для С#. Код, который я попытался, выглядит следующим образом:
FirefoxProfileManager profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile(profileName);
driver = new FirefoxDriver(profile);
Код, который я видел в сравнении с Java, использует ProfilesIni вместо FirefoxProfileManager, но это не доступно на С#. При настройке драйвера таким образом используется профиль селена, который имеет все настройки по умолчанию, а не параметры, указанные в профиле, на который я пытаюсь указать.
Я не уверен, что использую правильные методы для извлечения профиля, но если кто-то использовал Selenium 2 с С#, любая информация была бы полезной.
Ответы
Ответ 1
Мы используем такой метод для загрузки профиля Firefox по умолчанию (вы можете создать собственный профиль и загрузить его):
private IWebDriver driver;
string pathToCurrentUserProfiles = Environment.ExpandEnvironmentVariables("%APPDATA%") + @"\Mozilla\Firefox\Profiles"; // Path to profile
string[] pathsToProfiles = Directory.GetDirectories(pathToCurrentUserProfiles, "*.default", SearchOption.TopDirectoryOnly);
if (pathsToProfiles.Length != 0)
{
FirefoxProfile profile = new FirefoxProfile(pathsToProfiles[0]);
profile.SetPreference("browser.tabs.loadInBackground", false); // set preferences you need
driver = new FirefoxDriver(new FirefoxBinary(), profile, serverTimeout);
}
else
{
driver = new FirefoxDriver();
}
Ответ 2
У нас была та же проблема, что и профиль не загружался. Проблема в FirefoxProfile (строка 137). Он ищет только user.js, а профиль из Firefox - это prefs.js
137 → Файл prefsInModel = новый файл (модель, "user.js" );
Решение для взлома: переименуйте prefs.js → user.js
Ответ 3
Следующие работали для меня. Я должен был специально настроить предпочтение "webdriver.firefox.profile", чтобы заставить его работать.
var allProfiles = new FirefoxProfileManager();
if (!allProfiles.ExistingProfiles.Contains("SeleniumUser"))
{
throw new Exception("SeleniumUser firefox profile does not exist, please create it first.");
}
var profile = allProfiles.GetProfile("SeleniumUser");
profile.SetPreference("webdriver.firefox.profile", "SeleniumUser");
WebDriver = new FirefoxDriver(profile);
Ответ 4
У меня такая же проблема, это не дубликат.
Я использую следующее, которое работает
private IWebDriver Driver;
[Setup]
public void SetupTest()
{
string path = @"C:\Users\username\AppData\Local\Mozilla\Firefox\Profiles\myi5go1k.default";
FirefoxProfile ffprofile = new FirefoxProfile(path);
Driver = new FirefoxDriver(ffprofile);
}
Ответ 5
Кажется, что с профилем Роуминга это не нормально, а не с локальным профилем.
string path = @ "C:\Users\username\AppData\Roaming\Mozilla\Firefox\Profiles\myi5go1k.default";
FirefoxProfile ffprofile = новый FirefoxProfile (путь);
Driver = новый FirefoxDriver (ffprofile);
Ответ 6
Я также столкнулся с той же проблемой, и после поиска и тестирования множества различных комбинаций я смог получить Selenium для загрузки определенного профиля при использовании RemoteWebDriver.
Конфигурация сетки
Я запускаю HUB с помощью пакетного файла, содержащего следующие
"C:\Program Files (x86)\Java\jre6\bin\java.exe" -jar C:\Downloads\Selenium\selenium-server-standalone-2.20.0.jar -role hub -maxSession 50 -Dwebdriver.firefox.profile=Selenium
Я запускаю один или несколько узлов, используя пакетный файл, содержащий следующее (каждый node имеет уникальный номер порта):
"C:\Program Files (x86)\Java\jre6\bin\java.exe" -jar selenium-server-standalone-2.20.0.jar -role node -hub http://127.0.0.1:4444/grid/register -browser browserName=firefox,platform=WINDOWS,version=11.0,maxInstances=2 -maxSession 2 -port 5555 -Dwebdriver.firefox.profile=Selenium
Ключ здесь - последняя часть этих команд, которая должна соответствовать имени созданного вами настраиваемого профиля.
Код для создания экземпляра WebDriver
private readonly Uri _remoteWebDriverDefaultUri = new Uri("http://localhost:4444/wd/hub/");
private IWebDriver CreateFireFoxWebDriver(Uri remoteWebDriverUri)
{
var desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.SetCapability(CapabilityType.BrowserName, "firefox");
desiredCapabilities.SetCapability(CapabilityType.Platform, new Platform(PlatformType.Windows));
desiredCapabilities.SetCapability(CapabilityType.Version, "11.0");
var drv = new RemoteWebDriver(remoteWebDriverUri ?? _remoteWebDriverDefaultUri, desiredCapabilities);
return drv;
}
ПРИМЕЧАНИЕ.. Возможности должны совпадать с возможностями узлов, которые вы используете в сетке.
Затем вы можете вызывать этот метод, проходящий в Uri концентратора, или значение null по умолчанию для localhost.