在多监视器显示环境中,如何告诉Selenium在哪个显示器中打开一个新窗口?

Mik*_* Jr 30 selenium

对不起,如果有人问过并回答过.我做了一个搜索但是空了.

mst*_*nge 12

两个选项(这是针对 wrapper):

  1. 使用Selenium Driver的窗口定位命令:

    var monitor = Screen.FromPoint(new Point(Screen.PrimaryScreen.Bounds.Right + 1, Screen.PrimaryScreen.Bounds.Top));
    
    var seleniumDriver = new ChromeDriver(options);
    seleniumDriver.Manage().Window.Position = new Point(monitor.Bounds.X, monitor.Bounds.Y);
    
    var coypuDriver = new MultimonWebDriver(seleniumDriver, Browser.Chrome);
    var rv = new BrowserSession(sessionConfiguration, coypuDriver);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用命令行参数配置驱动程序.我更喜欢这个,因为在处理移动命令之前,解决方案#1会导致显示窗口的驱动程序服务器闪烁:

    var monitor = Screen.FromPoint(new Point(Screen.PrimaryScreen.Bounds.Right + 1, Screen.PrimaryScreen.Bounds.Top));
    
    var options = new ChromeOptions();
    options.AddArgument(String.Format("--window-position={0},{1}", monitor.Bounds.X, monitor.Bounds.Y));
    
    var seleniumDriver = new ChromeDriver(options);
    var coypuDriver = new MultimonWebDriver(seleniumDriver, Browser.Chrome);
    var rv = new BrowserSession(sessionConfiguration, coypuDriver);
    
    Run Code Online (Sandbox Code Playgroud)

其中MultimonWebDriver只是公开对受保护构造函数的访问:

public class MultimonWebDriver : SeleniumWebDriver
{
  public MultimonWebDriver(IWebDriver webDriver, Browser browser) : base(webDriver, browser)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 9

在python中:

browser = webdriver.Chrome()
browser.set_window_position(2000, 0)
Run Code Online (Sandbox Code Playgroud)

  • 这在 C# 中也能很好地工作。我使用: options.AddArguments("window-position=-2000,0"); 然后 driver.Manage().Window.Maximize(); 将 Chrome 放在我的左侧显示器上。 (3认同)

小智 6

在OSX Mavericks中,单击并按住扩展坞中的图标时,可以从“选项”菜单分配停止。这为我解决了问题。


小智 6

实际上,有一个相当简单的方法可以做到这一点。有一个名为“ set_window_position”的方法可以接受负值。因此,我希望浏览器在我的左屏幕上打开,因此将一个简单的负1000px像素拖动到足够的位置,以使maximum_window可以选择左屏幕。

driver.set_window_position(-1000, 0)
driver.maximize_window()
Run Code Online (Sandbox Code Playgroud)

因此,根据屏幕尺寸和您要去的地方,进行一些计算并将其拖到那里!

来源:http : //selenium-python.readthedocs.io/api.html#module-selenium.webdriver.firefox.webdriver(此示例中为Firefox)


小智 6

Wailord的答案对我有用,但它总是打开窗户然后移动它。所以有一个短暂的时刻它阻止了我的编辑。

Chrome 有一个用于窗口位置的命令行开关
--window-position=x,y
https://peter.sh/experiments/chromium-command-line-switches/#window-position

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('window-position=2000,0')  # opens at x=2000,y=0 from the start
driver = webdriver.Chrome(options=options)
Run Code Online (Sandbox Code Playgroud)


Ole*_*ers 5

我使用这个不是很花哨但快速的方法来实现这一点。因为我不仅希望它出现在我的第二个屏幕上,而且还希望它最大化,所以我不必在坐标上太精确。任何高于 2000 的 X 坐标通常都在我所有开发机器的第二个屏幕上:(本示例使用 chromedriver 但适用于任何 IWebDriver)

chrome = new ChromeDriver();
chrome.Manage().Window.Position = new System.Drawing.Point(2000, 1); // To 2nd monitor. 
chrome.Manage().Window.Maximize();
Run Code Online (Sandbox Code Playgroud)


Ser*_*rov 2

在辅助监视器上运行测试对于调试非常有用。不幸的是,您无法指定应在哪个监视器上打开浏览器。选项有:

  1. 打开浏览器并将其拖动到所需的监视器,然后将其关闭。下次它将在该显示器上打开
  2. 使用Ultramon等软件来控制在哪台显示器上启动浏览器。

您还可以使用将在第二台显示器上运行的虚拟机 - 只需将其拖到那里即可。