双屏环境下如何指定Robot Framework(SeleniumLibrary)测试所用显示器
指定Selenium驱动的Chrome测试窗口目标显示器的实现方法
核心实现逻辑
Windows多显示器环境下,系统会把所有屏幕组合成一个连续的虚拟桌面,每个屏幕的左上角在虚拟桌面中有固定的相对坐标:
- 主显示器左上角默认坐标为
(0,0) - 位于主显示器右侧的副屏,左上角X坐标等于主显示器的屏幕宽度(例如主显示器为1920px宽,副屏左上角X值为1920)
- 位于主显示器左侧的副屏,左上角X坐标为负数(例如主显示器为1920px宽,副屏在左侧时左上角X值为-1920)
只要把Chrome测试窗口的初始位置设置到目标显示器对应的坐标范围内,后续的最大化操作就会自动适配当前窗口所在的显示器,不会默认跳回主显示器。
具体实现代码
结合你现有的启动流程,有两种可落地的实现方式:
方式1:通过Chrome启动参数直接指定初始窗口位置(启动即落在目标显示器)
这种方式不需要等窗口打开后再手动移动,启动阶段就会直接把窗口放到目标屏幕,避免窗口短暂在主屏幕闪现:
Start Browser # 初始化Chrome配置对象 ${chrome_options}= Evaluate selenium.webdriver.ChromeOptions() modules=selenium.webdriver # 保留你原有的日志排除配置 Call Method ${chrome_options} add_experimental_option excludeSwitches ["enable-logging"] # 替换为你目标显示器的左上角坐标,示例坐标1920,0对应主显示器右侧1920宽的副屏 Call Method ${chrome_options} add_argument --window-position=1920,0 # 打开浏览器,注意不要搭配Chrome自带的--start-maximized参数 Open Browser ${url} ${BROWSER} options=${chrome_options} # 等窗口落到目标屏幕后,再调用库自带的最大化关键字,此时最大化会适配当前所在的目标显示器 Maximize Browser Window
方式2:窗口打开后通过Selenium API动态移动(灵活度更高)
如果不想在启动参数里硬编码坐标,可以在浏览器正常打开后,直接调用SeleniumLibrary内置的窗口位置设置关键字,把窗口移动到目标显示器坐标后再最大化:
Open Browser ${url} ${BROWSER} options=add_experimental_option("excludeSwitches", ["enable-logging"]) # 替换为目标显示器的左上角坐标,移动窗口到对应屏幕 Set Window Position x=1920 y=0 Maximize Browser Window
关键注意事项
- 坐标值需要和Windows显示设置中的实际排布对应:可以直接打开Windows「显示设置」,点选目标显示器查看它和主显示器的相对位置,根据屏幕宽度、高度计算实际偏移值,比如两个屏幕非顶部对齐排布时,Y值会存在对应偏移。
- 不要混用Chrome自带的
--start-maximized启动参数:该参数会强制窗口在默认主显示器最大化,完全覆盖自定义的窗口位置配置。 - 远程RDP执行场景下,需要确保RDP会话的多显示器映射开启正常,否则虚拟桌面的坐标计算会出现偏差,导致窗口移动失败。
内容的提问来源于stack exchange,提问作者Gustavo Furlan
相关产品推荐
相关产品推荐

