Использование определенного профиля 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.