如何在selenium会话中配置铬设置

时间:2013-12-31 14:12:44

标签: perl google-chrome selenium debian chromium

最近我升级到最新版本的chrome [1],现在默认禁用第三方cookie。现在我的一个测试使用chromedriver [3]对抗selenium [2],因为它依赖于第三方cookie(Facebook)。

我想要更改的设置似乎位于JSON中的文件/path/to/profile/Default/Preferences中,如下所示:

{
  ...
  "profile" : {
    ...
    "block_third_party_cookies": false,
    ...
  }
  ...
}

我想配置chrome,以便在我的selenium会话中此设置为false。

我尝试过的事情失败了:

我正在使用perl驱动程序库,它允许我传递将在会话创建期间使用的一些选项。

  1. 我尝试更改配置文件目录,以下内容出现在我的selenium服务器输出中:

    14:33:53.312 INFO - Executing: [new session: {platform=ANY, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, proxy={proxyType=direct}, chrome.switches=--user-data-dir=/path/to/profile/..., version=}] at URL: /session)

    我认为这种方法应该有效,但我只需要知道正确的参数名称。

  2. 更改/etc/chromium/master_preferences

  3. 中的设置

    [1] Chromium版本31.0.1650.63 Debian
    [2] Selenium独立版2.25.0
    [3] Chromedriver版本2.6.232917

1 个答案:

答案 0 :(得分:0)

我找到的解决方案使用chromeOptions.args功能来设置配置文件。我创建了一个具有正确设置的配置文件模板。我使用此配置文件作为模板。

在配置文件模板目录中,有一个名为Default/Preferences的文件,其内容为:

{
  "profile": {
    "block_third_party_cookies": false
  }
}

perl测试文件类似于:

use Selenium::Remote::Driver;
use File::Temp 'tempdir';

my $template_dir = '/path/to/template/dir/';
my $dirname = tempdir(
  'chrome_user_data_XXXXXX',
  DIR     => '/tmp',
  CLEANUP => 1,
);
system(qq|cp -a $template_dir/* $dirname|) == 0
  or die("Could not copy $template_dir/* to $dirname");

my $driver = Selenium::Remote::Driver->new(
  browser_name       => 'chrome',
  extra_capabilities => {
    args => ["user-data-dir=$dirname"],
  },
);