运行测试时,在OS X Dock中抑制Firefox图标

时间:2012-06-02 14:15:06

标签: python macos firefox selenium

目前在OSX Selenium驱动程序启动时在OSX上打开一个新的Firefox图标。而且,当前的应用程序失去焦点并因此中断例如中断。你的打字。

是否有可能让Selenium在OSX上启动Firefox,以免在Dock中引起焦点或引起额外操作?

2 个答案:

答案 0 :(得分:2)

您可以轻松修改Firefox,使其不会出现在Dock中。

在Finder中,右键单击Firefox应用程序图标,然后选择“显示包内容”。然后打开Contents文件夹并使用Property List Editor(随附XCode)或BBEdit / TextWrangler编辑Info.plist。在文件开头添加一个值为LSUIElement的密钥<true/>。在BBEdit / TextWrangler中,文件的开头如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>LSUIElement</key>
    <true/>

在Property List Editor中,右键单击任意键并选择Show Raw Keys / Values,然后右键单击顶级条目(“Information Property List”)并选择Add Row。为此项目的值指定LSUIelement并标记复选框。

我建议使用Property List Editor或BBEdit / TextWrangler而不是其他编辑器,因为大多数.plist文件都是二进制格式,而这些工具可以处理二进制.plist。其他文本编辑只会显示乱码。但是,我应该提到您可以使用Info.plist命令行实用程序将plutil文件转换为文本,例如:

plutil -convert xml1 /Applications/Firefox.app/Contents/Info.plist

然后您可以在任何您喜欢的文本编辑器中编辑它。之后你甚至不需要将它转换回二进制;文本格式实际上可以正常工作。

无论如何,保存info.plist文件并关闭并重新启动Firefox。图标(和菜单栏)现在将消失。 (不,它不可能显示菜单栏但隐藏图标,但我认为这不会打扰Selenium。)

关于你的第二个问题:从技术上讲,启动一个应用程序而不关注它是可能的。例如,这个Applescript启动Firefox并获取窗口列表,但是不会发送将它带到前面的activate消息。

tell application "Firefox" to get windows

您可以发送任何消息; get windows部分只是为了我们的目的而无所作为。关键是,您必须发送Firefox 一些消息才能启动它(AppleScript知道您无法向未运行的应用程序发送消息,因此它会为您启动它,但在背景)。

现在我不确定Selenium如何启动浏览器,但是可以修改它以使用osascript命令行工具或类似的东西启动Firefox,并使用上述命令。

osascript -e 'tell application "Firefox" to get windows'

我会留给你把这些碎片放在一起......

答案 1 :(得分:2)

问题是由于Firefox在没有焦点时并不总是正确地触发事件。这将很快修复,因为它现在是HTML5规范的标准部分。

我建议只使用一个非常轻量级的虚拟机,比如虚拟机或VMWare Fusion,只需使用Remote WebDriver。