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

Mal*_*ous 3 firefox phpunit selenium-webdriver

当使用PHPUnit和Firefox远程运行Selenium测试时,onChange事件不会像用户操作浏览器时那样被触发.

对此的解决方案似乎是在Firefox的首选项(即)中设置focusmanager.testmode选项,如Selenium错误报告中所建议的那样.trueabout:config

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

(不,我about:config不能自己动手设置它,因为每次运行测试时测试都会创建一个新的干净浏览器配置文件,因此任何手动配置更改都会丢失.)

Mal*_*ous 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));
}
Run Code Online (Sandbox Code Playgroud)

这将设置focusmanager.testmodetrue.

长版

您需要使用您想要设置的首选项创建自己的迷你Firefox配置文件,并在测试开始时传递它.这是怎么做的:

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

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

    user_pref("focusmanager.testmode", true);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 压缩文件夹(prefs.js应该在归档的根目录中),并对其进行base64编码.

如果你使用Linux,你可以这样做:

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

然后获取base64值并根据上面的简短版本将其设置为"firefox_profile"功能.