在C#中使用Selenium WebDriver中的特定Firefox配置文件

时间:2011-09-30 19:32:27

标签: c# firefox selenium webdriver

我正在尝试使用我已经使用selenium 2为firefox设置的配置文件,但没有C#的文档。我试过的代码如下:

FirefoxProfileManager profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile(profileName);
driver = new FirefoxDriver(profile);

我见过的代码在Java中是可比的,使用的是ProfilesIni而不是FirefoxProfileManager,但这在C#中不可用。以这种方式设置驱动程序时,使用的selenium配置文件具有所有默认设置,而不是我试图指向的配置文件中指定的设置。

我不确定我是否使用正确的方法来检索配置文件,但如果有人将Selenium 2与C#一起使用,那么任何信息都会有所帮助。

7 个答案:

答案 0 :(得分:6)

我们使用这种方法加载默认的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();
}

答案 1 :(得分:3)

我们遇到的问题是配置文件无法加载。问题出在FirefoxProfile(第137行)。它只查找user.js,Firefox中的配置文件实际上是prefs.js

137>>文件prefsInModel =新文件(model,“user.js”);

黑客解决方案:重命名prefs.js - > user.js的

答案 2 :(得分:1)

以下对我有用。我必须专门设置" 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);

答案 3 :(得分:0)

我有同样的问题,它不是重复的。

我正在使用以下工作

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);
}

答案 4 :(得分:0)

使用上述答案后我没有结果,所以我尝试了以下替代方法:

首先,通过在 Firefox 地址栏上输入 about:profiles 创建所需的配置文件。

其次,C#代码。请注意,我们在第一步创建的配置文件名称作为参数传递。

public IWebDriver driver { get; set; }
    
public Selenium(String nombrePefil)
{
    if (this.driver == null)
    {
        FirefoxOptions options = new FirefoxOptions();                     

        options.AddArgument("--profile " + nombrePefil);

        this.driver = new FirefoxDriver(options);                        
                    
    }
}

答案 5 :(得分:-1)

我也遇到了同样的问题,在搜索并尝试了许多不同的组合之后,我能够让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

我使用包含以下内容的批处理文件启动一个或多个节点(每个节点都有一个唯一的端口号):

"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。

答案 6 :(得分:-1)

使用漫游配置文件而不是本地配置文件似乎很好。

string path = @“C:\ Users \ username \ AppData \ Roaming \ Mozilla \ Firefox \ Profiles \ myi5go1k.default”; FirefoxProfile ffprofile = new FirefoxProfile(path); Driver = new FirefoxDriver(ffprofile);