我正在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移动到不同的显示器上?

推荐答案

正如您所提到的,使用robotjs库,您可以通过模拟键盘快捷键来实现所需的操作.像(在Windows中)按两次‘Windows键+向右箭头键’的组合可以将窗口移动到右边的显示器上.

我看了RobotJS,但它没有多显示器支持,尽管有Forking 出现,尽管这并没有提供一种方法来简单地将窗口移动到不同的桌面.

Node.js相关问答推荐

MongoDB:更新批量操作中许多不能正常工作的内容

设置默认 node 版本

即使卷已设置,Docker Nodemon 也不会热重载

在 .htaccess 中从非 www 切换到 www 后如何解决无法访问该站点?

我如何保护nodejs中的路由

将文件传递到 AWS lambdas(nodejs) + API 网关后重新上传文件

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

当我try 从本地主机发布新产品时收到错误消息

使用 node/express/Multer,您如何首先判断参数?

在 Atlas 触发器(Node JS)中正确初始化 Firebase 管理 SDK

使用 firebase 函数 api 运行套接字(相同的端口创建问题)

aws cdk 2.0 init 应用程序无法构建更漂亮的问题,这来自 jest-snapshot

Socket IOFlutter 未连接

baseurl64 缓冲区解码

node.js 是否支持yields ?

异步函数 - 等待不等待promise

错误:大多数中间件(如 bodyParser)不再与 Express Bundle

如何监控 node.js 上的网络,类似于 chrome/firefox 开发者工具?

如何判断 Node.js 中是否设置了环境变量?

如何从 Node.js 中的 URL 获取