2011-12-22 26 views
10

Tengo un problema con el controlador de Chrome y Selenium 2. El problema es que cuando comienzo la sesión de mi navegador utilizando el controlador cromado siempre comienza en una ventana que es menos de la mitad del ancho de la pantalla disponible. Como realizo pruebas en una página que cambia cuando cambia el tamaño de la pantalla, mis pruebas fallan porque estoy intentando arrastrar un elemento desde la parte superior de la página y soltarlo en un elemento que se encuentra en la parte inferior de la página. Me sale un error de desplazamiento. Pero si la ventana está maximizada, entonces no obtengo este error. Pero el problema es que cada vez que Chrome inicia una nueva sesión a través del controlador de Chrome, siempre comienza en una ventana pequeña. He explorado muchas opciones diferentes para obtener el navegador para empezar maximizado:Mac selenium webdriver ventana de cromo siempre comienza con una pequeña ventana

  • efectuar una llamada mediante javascript para cambiar el tamaño de la ventana usando window.resizeTo (anchura, altura) ;. Sin embargo, esto no funciona en versiones posteriores de Chrome (o Firefox para el caso).
  • Comience cromado con un interruptor --start-maximized. Esto funciona en Windows, pero esto no hace nada en un Mac.
  • Inicie Chrome con un modificador que especifique un directorio de perfil. De esta forma, el perfil definiría el tamaño de la ventana. --profile-directory = ~/chromeprofile Esto funcionó cuando inicié Chrome desde la línea de comandos, pero si hago esto desde Selenium webdriver/chromedriver no hace ninguna diferencia.
  • Cuando intento:.. Driver.manage() ventana setSize()() consigo esta excepción:

    INFO: Executing: [93debf43cf70ad3557442a7e1aee4620, setWindowSize {"windowHandle":"current","width":2560,"height":1440}] 
    org.openqa.selenium.UnsupportedCommandException: [GET, HEAD, DELETE] 
    Command duration or timeout: 16 milliseconds 
    Build info: version: '2.15.0', revision: '15105', time: '2011-12-08 09:56:25' 
    System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.7.2', java.version: '1.6.0_29' 
    Driver info: driver.version: RemoteWebDriver 
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
        at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:147) 
        at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:113) 
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:424) 
        at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteWindow.setSize(RemoteWebDriver.java:578) 
        at com.domo.automation.framework.utility.WebDriverUtil.startWebDriver(WebDriverUtil.java:36) 
        at com.domo.automation.tests.DomoWebDriverTestCase.setUp(DomoWebDriverTestCase.java:45) 
        at junit.framework.TestCase.runBare(TestCase.java:132) 
        at junit.framework.TestResult$1.protect(TestResult.java:110) 
        at junit.framework.TestResult.runProtected(TestResult.java:128) 
        at junit.framework.TestResult.run(TestResult.java:113) 
        at junit.framework.TestCase.run(TestCase.java:124) 
        at junit.framework.TestSuite.runTest(TestSuite.java:243) 
        at junit.framework.TestSuite.run(TestSuite.java:238) 
        at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
        at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
        at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71) 
        at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199) 
        at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62) 
    

¿Qué otras opciones podría explorar con el fin de lograr esto? ¿El problema es que la ventana es demasiado pequeña? ¿Qué puedo hacer para maximizar automáticamente la ventana cada vez que Chrome se inicia vía webdriver en un Mac?

Respuesta

1

driver.manage().window().setSize() es el método que desea utilizar

+0

Me di cuenta de que esto funciona para firefoxdriver pero no para el controlador de Chrome. Con el cromedriver obtengo la excepción que se muestra en mi publicación. – justspamjustin

4

driver.manage(). Ventana(). SetSize() no funciona actualmente con ChromeDriver (a partir de v19). Hay un active chromium issue relacionado con esta solicitud de función.

El current workaround generalmente recomendado es utilizar las Capacidades Deseadas para establecer el tamaño de la ventana, pero tiene razón de que no parece funcionar en absoluto en la Mac.

La única solución que he encontrado es abrir una nueva ventana usando JavaScript y cambiar el tamaño de la nueva ventana de la misma manera. Se describe en profundidad en this thread on the topic. La solución correspondiente se muestra en el siguiente código:

JavascriptExecutor js = ((JavascriptExecutor)driver); 
js.executeScript("window.open('','testwindow','width=400,height=200')"); 
driver.close(); 
driver.switchTo().window("testwindow"); 
js.executeScript("window.moveTo(0,0);"); 
js.executeScript("window.resizeTo(1280,800);"); 

Me temo que es bastante torpe, pero funcionó para mí localmente usando Chrome en Mac (León).

+0

¡Gracias! Esto funcionó para mí, pero me salté el movimiento y cambié el tamaño. Acabo de inicializarlo con 'js.executeScript (" window.open ('', 'testwindow', 'width = 1280, height = 800, top = 0, left = 0') ");' (usando tus valores por ejemplo) –

+0

'setSize()' ahora parece funcionar bien en Mac, sin embargo, al ejecutar un conjunto de pruebas encontré que en algún punto aleatorio, después de tal vez cuatro de cinco pruebas se han ejecutado, el tamaño se vuelve muy extraño (como 917 de ancho cuando configuro 1200). Para evitar eso, llame a 'driver.manage(). Window(). SetPosition (new Point (0, 0));' _before_ the 'setSize()' llamada.Esto fue mencionado recientemente en este viejo informe de errores de Selenium: https://code.google.com/p/selenium/issues/detail?id=174#c55 – RedYeti

2

Lo que describió aquí también fue el caso para mí. Después de this article, puede establecer la preferencia de chromedriver al iniciarlo.

Ruby:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile['browser.window_placement.top'] = 0 
profile['browser.window_placement.left'] = 0 
profile['browser.window_placement.right'] = 1024 
profile['browser.window_placement.bottom'] = 768 
Selenium::WebDriver.for :chrome, profile: profile 

Esto funcionó en Windows y Mac. Sin embargo, en Java, no pude verificar la API para establecer la preferencia de chromedriver. Here is a question preguntó al respecto pero parece que todavía no se ha encontrado una respuesta.

1

Resolví este problema ejecutando un script de apple. Esto, por supuesto, te vincula con la ejecución en una Mac, pero eso estuvo bien para nosotros. Windows no tiene el mismo problema de maximización para Chrome, así que si te importa podrías hacer un OS check.

Encontré la secuencia de comandos de apple que utilicé here. Lo copié a continuación en caso de que el enlace nunca se rompe:

tell application (path to frontmost application as string) 
to copy (run script "tell application \"Finder\" to desktop's window's bounds") 
to bounds of window 1 

he usado este script (inspirado en this question) para activar la ventana del navegador en primer lugar:

tell application "Google Chrome" 
    activate 
end tell 

I ejecutados en Java usando este comando:

Runtime.getRuntime().exec(scriptPath) 

Espero que esto ayude a alguien.

2

La mejor solución que encontré hasta ahora es la siguiente:

después de comenzar el navegador ejecuta el siguiente código

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

Dimension targetSize = new Dimension(1920, 1080); //your screen resolution here 
driver.manage().window().setSize(targetSize); 

espero que ayude. Logré maximizar Chrome bajo MAC usando esta solución.

0

Es una publicación muy antigua, pero aún así me enfrenté a este problema hoy y resolví usando el siguiente código.

java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
org.openqa.selenium.Point position = new Point(0, 0); 
driver.manage().window().setPosition(position); 
org.openqa.selenium.Dimension maximizedScreenSize = 
      new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight()); 
driver.manage().window().setSize(maximizedScreenSize); 
0

Tengo mismo problema en MAC.

He tratado a continuación las opciones pero no funciona:

  1. driver.manage().window().maximize();

  2. Aquí

    ChromeOptions chromeOptions = new ChromeOptions(); 
    chromeOptions.addArguments("--start-maximized"); 
    driver = new ChromeDriver(chromeOptions); 
    

fin he encontrado a continuación solución que funciona en todos los sistemas operativos:

ChromeOptions options = new ChromeOptions(); 
options.addArguments("start-fullscreen"); 

Avisadme si cualquier consulta.

0

Compruebe la siguiente solución, Funcionará para usted.

System.setProperty("webdriver.chrome.driver", driverPath); 
ChromeOptions options= new ChromeOptions(); 
options.addArguments("start-fullscreen"); 
Cuestiones relacionadas