PHPUnit + Selenium:如何设置Firefox:config options?

时间:2014-06-04 07:56:16

标签: firefox selenium-webdriver phpunit

使用PHPUnit和Firefox远程运行Selenium测试时,onChange事件are not fired as they are when a user is operating the browser

对此的解决方案似乎是在Firefox的首选项中设置focusmanager.testmode选项true(即about:config),如Selenium bug report中所述

然而,所有示例都直接使用Selenium,而我使用的是PHPUnit,它有自己的API隐藏Selenium内部。我无法弄清楚如何使用PHPUnit设置这个Firefox选项,所以我希望其他人可以告诉我如何做到这一点!

(不,我不能进入about:config并手动设置它,因为每次运行测试时测试都会创建一个新的干净浏览器配置文件,因此任何手动配置更改都将丢失。)< / p>

1 个答案:

答案 0 :(得分:8)

感谢Selenium开发人员,我有一个解决方案!

短版

将它放入测试中,以便在setUp()函数中调用它:

// Firefox mini-profile that sets focusmanager.testmode=true in about:config
define('FIREFOX_PROFILE',
'UEsDBAoAAAAAADqAxkSBK46tKgAAACoAAAAIABwAcHJlZnMuanNVVAkAA1BZkVM6WZFTdXgLAAEE
6AMAAARkAAAAdXNlcl9wcmVmKCJmb2N1c21hbmFnZXIudGVzdG1vZGUiLCB0cnVlKTsKUEsBAh4D
CgAAAAAAOoDGRIErjq0qAAAAKgAAAAgAGAAAAAAAAQAAAKSBAAAAAHByZWZzLmpzVVQFAANQWZFT
dXgLAAEE6AMAAARkAAAAUEsFBgAAAAABAAEATgAAAGwAAAAAAA==');

protected function setUp()
{
    $this->setDesiredCapabilities(Array('firefox_profile' => FIREFOX_PROFILE));
}

这会将focusmanager.testmode设置为true

长版

您需要使用您想要设置的首选项创建自己的迷你Firefox配置文件,并在测试开始时传递它。以下是如何做到这一点:

  1. 创建一个新文件夹,并将所需文件放在Firefox配置文件中。这可以是任何内容(书签,扩展程序,您自己的个人资料的副本等),但我们需要的是一个名为prefs.js的文件,用于存储我们的about:config设置。

  2. 使用以下内容在此文件夹中创建prefs.js

    user_pref("focusmanager.testmode", true);
    
  3. 压缩文件夹(prefs.js应位于存档的根目录中),并对其进行base64编码。

  4. 如果你正在使用Linux,你可以这样做:

    mkdir firefox-profile
    cd firefox-profile
    echo 'user_pref("focusmanager.testmode", true);' >> prefs.js
    zip -r ../firefox-profile.zip *
    base64 < ../firefox-profile.zip
    

    然后取base64值并将其设置为&#34; firefox_profile&#34;根据上面的简短版本的能力。