Selenium设置首选项目录

时间:2012-04-29 21:04:21

标签: c# firefox selenium webdriver selenium-webdriver

我正在使用firefox webdriver。我想将所有cookie和缓存文件存储到自定义目录中。但它采用临时目录而不是我的目录。这是我的代码:

FirefoxProfile firefoxProfile = new FirefoxProfile(path, false);
MessageBox.Show(firefoxProfile.ProfileDirectory);     //Its showing blank
driver = new FirefoxDriver(firefoxProfile);
MessageBox.Show(firefoxProfile.ProfileDirectory);    //Its showing the temp dir
                                                     //not my custom dir

如何使它占用我的目录并将所有cookie和文件存储在那里?

感谢。

编辑:

我需要修复selenium配置文件目录(因为它一直在变化)。这样我就可以使用以前的cookie和缓存文件了。你能给我任何想法或任何其他方法来实现它吗?

3 个答案:

答案 0 :(得分:0)

FirefoxProfile.ProfileDirectory指的是生成的配置文件目录(显然,仅在创建浏览器实例后可用) 根据Selenium源代码,配置文件目录在temp文件夹中生成为随机目录,因此无法更改

// creates a random folder name in Path.GetTempPath()
this.profileDir = GenerateProfileDirectoryName(); 

public string ProfileDirectory
{
    get
    {
        return this.profileDir;
    }
}

而在profileDirectory创建期间指定的FirefoxProfile用于加载user.js.

引自mozillaZine

  

user.js文件是修改首选项的另一种方法,   建议仅限高级用户使用。

<强> UPD。 解决问题的唯一方法我可以看到,除了深入研究硒源之外,还在更改临时文件夹位置,然后再将webdriver启动到所需的文件夹,然后将其更改为当前用户的原始值。

<强> UPD2。 另一个可能的解决方案(虽然尚未尝试)是为先前的webdriver指定ProfileDirectoryprofileDirectory运行另一个webdriver实例的新FirefoxProfile实例。鉴于来自profileDirectory的所有文件都被复制到生成的临时文件夹,这可以帮助您实现所需的功能。

答案 1 :(得分:0)

您可以直接找到临时文件路径,然后在创建驱动程序后使用系统命令将文件复制到此文件夹中。然后你可以访问它们,虽然这有点hacky但应该工作(除非我错过了一些关键的东西,我觉得我可能有:) :)

答案 2 :(得分:0)

你是否绝对有必要使用firefox?如果您使用的是IE,这不会被照顾吗?从selenium jar帮助内容

  

-ensureCleanSession:如果浏览器没有用户个人资料,请make   确保每个新会话都没有以前会话的工件。对于   例如,启用此选项将导致所有用户cookie   在启动IE之前存档,并在IE关闭后恢复。

因此,如果在IE中运行测试时使用该选项,您的Cookie将保留。我没有尝试过webdriver,但我看到在使用Selenium 1时保留了cookie。