2010-09-28 7 views

Respuesta

3

Es muy útil para la depuración ejecutar pruebas en un monitor secundario. Desafortunadamente no se puede especificar en qué monitor se debe abrir el navegador. Las opciones son:

  1. Abra el navegador y arrástrelo al monitor deseado, luego ciérrelo. La próxima vez se abrirá en ese monitor
  2. Use software como Ultramon para controlar en qué monitor iniciar el navegador.

También puede utilizar una máquina virtual que se ejecutará en el segundo monitor, simplemente arrástrelo allí.

+0

Mi SUT (sistema bajo prueba) abre una nueva ventana en ciertos puntos de mi escenario de prueba. Tengo tres monitores y quería enviarlo a un monitor diferente. Oh bien. La técnica que finalmente establecí para forzar en qué monitor se abre la aplicación es usar Preferencias del sistema de mi Macbook -> pantalla para establecer qué ventana es la ventana principal. Iba por defecto a mi computadora portátil (demasiado pequeña) y cada vez que saltaba una ventana, aparecía allí. Al hacer que una de mis pantallas grandes sea la ventana principal, ahora todo aparece allí. Gracias por las respuestas –

1

Mi solución es instalar un servidor VNC, abrir el VNC en uno de los monitores e iniciar el selenio a través del VNC. Entonces siempre tiene un monitor para los navegadores de selenio sin las molestas ventanas abiertas cada vez que se inicia una prueba

+0

Interesante ... –

3

En OSX Mavericks puede asignar destop desde el menú Opciones al hacer clic y mantener presionado el icono desde la base. Esto resolvió mi problema.

+0

Eres un salvavidas. – codemon

8

dos opciones (esto es para el envoltorio):

  1. utilizar los comandos de la ventana de posicionamiento del conductor Selenio:

    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. configurar el controlador con un argumento de línea de comandos. Prefiero esto porque la solución # 1 se produce un parpadeo desde el servidor del controlador que muestra la ventana antes de procesar el comando de movimiento:

    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); 
    

donde MultimonWebDriver es simplemente exponiendo el acceso al constructor protected:

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

Si está ejecutando Windows 7 o posterior, puede (hack-ishly) lograr esto configurando la pantalla deseada como su pantalla principal en "Cambiar configuración de pantalla". Cualquier nueva ventana del navegador ahora se abrirá en este. Tenga en cuenta que esto, por supuesto, afecta su barra de herramientas, etc., que puede ser molesto o no. Sin duda es menos molesto que tener ventanas del navegador lanzadas a tu cara de manera constante.

1

Utilizo este método no muy elegante pero rápido para lograrlo. Como no solo lo quiero en mi segunda pantalla sino que también lo maximizo, no tengo que ser demasiado preciso con las coordenadas.Cualquier coordenada X por encima de 2000 es por lo general en la segunda pantalla para todas mis máquinas dev: (En este ejemplo se utiliza chromedriver pero funciona con cualquier IWebDriver)

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

en Python:

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

Para 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); no funcionó para mí.

1

Muevo la ventana del navegador al segundo monitor y lo maximizo allí (vea el código a continuación). Tengo 2 monitores de 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); 
} 
0

me he dado cuenta de que mediante el establecimiento de estas cosas de abajo, mi navegador se abre todos los días en el mismo monitor (tengo dos monitores de la EDP y un monitor HDMI secundaria). Tal vez tiene que ver con la posición:

# 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) 
1

En realidad, esta es una forma bastante sencilla de hacerlo. Hay un método llamado 'set_window_position' que acepta valores negativos. Así que quería que el navegador se abriera en mi pantalla izquierda, por lo que un simple pixelado negativo de 1000px lo arrastró lo suficiente para que la ventana de maximización escogiera la pantalla de la izquierda.

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

Así que dependiendo de los tamaños de pantalla y donde quiera que vaya, hacer algunos cálculos y sólo tienes que arrastrar allí!

Fuente: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.firefox.webdriver (recogido Firefox para este ejemplo)

0

me di cuenta de que para mí es siempre la apertura en el monitor principal. Así que cambié la pantalla principal de la ventana de opciones de configuración de visualización de OSX.

Cuestiones relacionadas