使用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>
答案 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配置文件,并在测试开始时传递它。以下是如何做到这一点:
创建一个新文件夹,并将所需文件放在Firefox配置文件中。这可以是任何内容(书签,扩展程序,您自己的个人资料的副本等),但我们需要的是一个名为prefs.js
的文件,用于存储我们的about:config
设置。
使用以下内容在此文件夹中创建prefs.js
:
user_pref("focusmanager.testmode", true);
压缩文件夹(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
然后取base64值并将其设置为&#34; firefox_profile&#34;根据上面的简短版本的能力。