我正在try 自动化设置一个Chrome窗口的过程,该窗口是由Selify在node.js下打开的,用于一些测试,其中一个要求是该窗口必须出现在不同的显示器上.
看来,selenium并不支持这一点.我也找不到node.js中支持这一点的任何其他自动化应用程序.我查看了node-Window-Manager,它似乎没有任何将窗口移动到不同监视器的方法.它能够查看窗口打开的是哪台显示器,但只能在Windows下运行.我研究了RobotJS,但它不支持多显示器,尽管有一些分支似乎支持,尽管这不提供一种简单地将窗口移动到不同桌面的方法.
我想到了简单地使用AppleScript来调用菜单选项Window>;"Move to<;monitor>;(2)"的 idea ,但要做到这一点,我需要了解过程.Selify不支持查找刚开始的Chrome进程的ID,所以我try 从AppleScrip获取它.不幸的是,还有其他打开的Chrome窗口(与Selence无关),所以我不能只寻找Chrome进程.因此,我从以下代码开始try 按标题定位窗口:
tell application "System Events"
set allProcesses to application processes
repeat with i from 1 to count allProcesses
set thisProcess to item i of allProcesses
set allWindows to windows of thisProcess
repeat with j from 1 to count allWindows
set thisWindow to item j of allWindows
if name of thisWindow contains "<my window title>"
tell thisProcess
click menu item "Move to <monitor model> (2)" of menu "Window" of menu bar 1
end tell
exit repeat
...
当我第一次运行它时,我得到了一个权限错误,不得不通过操作系统授予权限.但在这之后,我没有得到这个错误.
然而,这并没有起到任何作用.相反,我试着打印出所有的窗口标题,发现有几个标题是空白的,但没有一个与我的窗口标题匹配.考虑到通过大小和位置标识窗口,我修改了Selify中Chrome窗口的创建,以包括以下内容:
let options = new chrome.Options()
options.addArguments("--window-position=0,0")
options.addArguments("--window-size=1000,900")
options.addArguments("--window-name=SELENIUM")
let driver = await new Builder().forBrowser("chrome").setChromeOptions(options).build()
但是,窗口标题、大小或位置都不匹配.我注意到,当我关闭Selify打开的Chrome浏览器时,其中一个空的命名窗口消失了.所以我试着点击上面的菜单.但这会产生一个错误:
Error: System Events got an error: Can’t get menu item "Move to <monitor model> (2)" of menu "Window" of menu bar 1 of application process "Google Chrome"., number: -1728
但这扇windows 是可疑的.它有一个非常奇怪的大小(13x1440)和位置(0,-484),这与另一个报告的窗口相同.如果我关闭不相关的Chrome窗口,第二个窗口就会消失.因此,我怀疑Chrome出于某种原因总是有一个屏幕外不可见的窗口,或者看起来像是在AppleScrip上.
如何自动将Chrome窗口与MacOS下的node.js移动到不同的显示器上?