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

时间:2010-09-28 18:54:42

标签: selenium

很抱歉,如果已经询问并回答了这个问题。我做了一个搜索但是空了。

18 个答案:

答案 0 :(得分:11)

两个选项(这适用于 包装器):

  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);
    
  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);
    
  3. 其中MultimonWebDriver只是公开对受保护构造函数的访问:

    public class MultimonWebDriver : SeleniumWebDriver
    {
      public MultimonWebDriver(IWebDriver webDriver, Browser browser) : base(webDriver, browser)
      {
      }
    }
    

答案 1 :(得分:9)

在python中:

browser = webdriver.Chrome()
browser.set_window_position(2000, 0)

答案 2 :(得分:6)

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

driver.set_window_position(-1000, 0)
driver.maximize_window()

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

来源:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.firefox.webdriver(本例选择了Firefox)

答案 3 :(得分:5)

在OS X Mavericks中,您可以在从Dock中单击并按住图标时从“选项”菜单中指定桌面。这解决了我的问题。

答案 4 :(得分:4)

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

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

答案 5 :(得分:4)

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

  1. 打开浏览器并将其拖动到所需的显示器,然后将其关闭。下次将在该监视器上打开
  2. 使用Ultramon等软件控制哪台显示器启动浏览器。
  3. 此外,您可以使用将在第二台显示器上运行的虚拟机 - 只需将其拖动到那里。

答案 6 :(得分:1)

我的解决方案是安装VNC服务器,在其中一个监视器中打开VNC,然后通过VNC启动selenium。 然后你总是有一个用于selenium浏览器的监视器,而不会在每次启动测试时打开烦人的窗口

答案 7 :(得分:1)

如果您运行的是Windows 7或更高版本,则可以通过在“更改显示设置”下将所需的显示设置为主显示来实现此目的(hack-ishly)。任何新的浏览器窗口现在都将在此打开。保持主要,这当然会影响你的工具栏等,这可能会或可能不会令人讨厌。它肯定不会比稳定地在你的脸上抛出浏览器窗口那么烦人。

答案 8 :(得分:1)

我将浏览器窗口移动到第二个显示器并在那里最大化(参见下面的代码)。 我有2台1920x1080显示器。

//// 1. Get screen resolution 
java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();

if (width <= 1920) {

    //// 2. Move browser to second monitor and maximize

    Point point = new Point(width, 0);
    driver.manage().window().setPosition(point);
    driver.manage().window().maximize();

} else {

    //// 3. If your resolution is wider than a typical monitor, 
    ////    open the browser in a more realistic resolution

    Point point = new Point(0, 0);
    driver.manage().window().setPosition(point);

    Dimension targetWindowSize;
    targetWindowSize = new Dimension(1920, 1080);
    driver.manage().window().setSize(targetWindowSize);
}

答案 9 :(得分:1)

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)

答案 10 :(得分:1)

使用这种观点:

WebDriver chrome1 = new ChromeDriver();
WebDriver chrome2 = new ChromeDriver();

chrome1.manage().window().maximize();//display 1

chrome2.manage().window().setPosition(new Point(2000,0));//display 2
Thread.sleep(1000);// 1 sec
chrome2.manage().window().maximize();//maximize display 2

答案 11 :(得分:0)

我找到了一种解决方法,在我的情况下,它在 Windows 10 中对我有用。我只是通过显示设置将我的第二台显示器作为主显示器:

Main Display via Display Settings

希望这对你也有帮助!

答案 12 :(得分:0)

在Mac上,您可以在System Preferences > Displays > Arrangement中控制它

主屏幕顶部有一个白色栏。将其拖到要呈现浏览器的屏幕上

答案 13 :(得分:0)

只需将Mac的“菜单栏”放在要打开浏览器的监视器上。设置默认监视器。

答案 14 :(得分:0)

如果要打开浏览器窗口的监视器位于带有IDE的监视器的位置,请尝试使用负值。在Java中:

WebDriver driver = new FirefoxDriver();
driver.manage().window().setPosition(new Point(-1500, 0));

答案 15 :(得分:0)

我注意到对我来说它始终在主监视器中打开。所以我从OSX显示排列选项窗口更改了主显示。

答案 16 :(得分:0)

我注意到通过设置以下内容,我的浏览器始终在同一台显示器中打开(我有两台显示器eDP和一台辅助HDMI显示器)。也许这与职位有关:

# console log
d = desired_capabilities.DesiredCapabilities.CHROME
d['loggingPrefs'] = { 'browser':'ALL' }

# Driver
self.driver = webdriver.Chrome(desired_capabilities=d)
self.driver.implicitly_wait(5) # seconds
self.driver.set_window_size(800, 800)
self.driver.set_window_position(0, 0)

答案 17 :(得分:0)

Java

//imports:
import java.awt.*;
import java.awt.event.InputEvent;

driver = new FirefoxDriver();

//drag & drop to my right screen in debug mode:
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("jdwp") >= 0;

if(isDebug) {
  Robot robot = new Robot();

  robot.mouseMove(800, 10);
  robot.mousePress(InputEvent.BUTTON1_MASK);
  robot.mouseMove(2800, 100);
  robot.mouseRelease(InputEvent.BUTTON1_MASK);
  driver.manage().window().maximize();
}

driver.manage().window().setPosition(point);对我不起作用。