0

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

是否有可能让 Selenium 在 OSX 上启动 Firefox,这样它就不会集中注意力或在 Dock 中引起额外的动作?

4

2 回答 2

2

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

在 Finder 中,右键单击 Firefox 应用程序图标并选择显示包内容。然后打开 Contents 文件夹并Info.plist使用 Property List Editor(XCode 附带)或 BBEdit/TextWrangler 进行编辑。在文件的开头添加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这些天大多数文件都是二进制格式,并且这些工具可以处理 binary .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'

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

于 2012-06-02T16:48:06.503 回答
2

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

我建议在 virtualbox 或 VMWare Fusion 之类的东西中使用一个非常轻量级的 VM,并且只使用 Remote WebDriver。

于 2012-06-03T09:25:16.463 回答