2011-12-22 29 views
10

Ho riscontrato un problema con il webdriver Chrome e selenio 2. Il problema è che quando avvio la mia sessione del browser utilizzando il chromedriver inizia sempre in una finestra che è meno della metà della dimensione della larghezza dello schermo disponibile. Poiché eseguo dei test su una pagina che cambia quando le dimensioni dello schermo cambiano, i test falliscono perché sto cercando di trascinare un elemento dalla parte superiore della pagina e rilasciarlo su un elemento che si trova nella parte inferiore della pagina. Ottengo un errore di scorrimento. Ma se la finestra è ingrandita, allora non capisco questo errore. Ma il problema è che, ogni volta che Chrome avvia una nuova sessione tramite il driver chrome, inizia sempre in una piccola finestra. Ho esplorato diverse opzioni per ottenere il browser per iniziare massimizzato:La finestra di Chrome per il selenio del selenio si avvia sempre con una piccola finestra

  • effettuare una chiamata tramite javascript per cambiare le dimensioni della finestra utilizzando window.resizeTo (larghezza, altezza) ;. Tuttavia, questo non funziona nelle versioni successive di chrome (o firefox per quella materia).
  • Avvia chrome con uno switch --start-maximized. Funziona su Windows, ma questo non fa nulla su un Mac.
  • Avvia chrome con uno switch che specifica una directory di profilo. In questo modo il profilo definirà la dimensione della finestra. --profile-directory = ~/chromeprofile Questo ha funzionato quando ho avviato chrome dalla riga di comando, ma se faccio questo da selenio webdriver/chromedriver non fa alcuna differenza.
  • Quando provo:.. Driver.manage() Finestra setSize()() ottengo questa eccezione:

    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) 
    

Quali altre opzioni ho potuto esplorare al fine di raggiungere questo obiettivo? Il problema è che la finestra è troppo piccola? Cosa posso fare per massimizzare automaticamente la finestra ogni volta che Chrome si avvia tramite webdriver su un Mac?

risposta

1

driver.manage().window().setSize() è il metodo che si desidera utilizzare

+0

Ho notato che questo funziona per firefoxdriver ma non per il driver chrome. Con il chromedriver ottengo l'eccezione mostrata nel mio post. – justspamjustin

4

driver.manage(). Finestra(). SetSize() non attualmente funziona con ChromeDriver (come del V19). C'è un active chromium issue relativo a questa richiesta di funzionalità.

Il current workaround in genere è consigliabile utilizzare DesiredCapabilities per impostare le dimensioni della finestra, ma hai ragione che non sembra funzionare sul Mac affatto.

L'unica soluzione che ho trovato è aprire una nuova finestra utilizzando JavaScript e ridimensionare la nuova finestra nello stesso modo. È descritto in profondità in this thread on the topic. La soluzione in questione è mostrato nel seguente codice:

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

ho paura che sia abbastanza goffo, ma ha funzionato per me a livello locale utilizzando Chrome su Mac (Lion).

+0

Grazie! Questo ha funzionato per me, ma ho saltato la mossa e ridimensionato. L'ho appena inizializzato con 'js.executeScript (" window.open ('', 'testwindow', 'width = 1280, height = 800, top = 0, left = 0') ");' (usando i tuoi valori per esempio). –

+0

'setSize()' ora sembra funzionare bene su Mac, tuttavia, quando eseguo una serie di test, ho scoperto che in alcuni punti casuali, dopo aver eseguito quattro dei cinque test, la dimensione diventa molto dispari (come 917 di larghezza quando imposto 1200). Per evitare ciò, chiamate 'driver.manage(). Window(). SetPosition (new Point (0, 0));' _prima_ la chiamata 'setSize()'.Questo è stato menzionato di recente su questo vecchio bug report Selenium: https://code.google.com/p/selenium/issues/detail?id=174#c55 – RedYeti

2

Quello che hai descritto qui è stato anche il caso per me. In seguito a this article, è possibile impostare la preferenza per chromedriver all'avvio.

Rubino:

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 

Questo ha funzionato su Windows e Mac. Su Java però, non ho potuto verificare l'API per l'impostazione della preferenza per chromedriver. Here is a question chiesto su di esso, ma sembra non è stata ancora trovata risposta.

1

Ho risolto questo problema eseguendo uno script Apple. Questo, ovviamente, ti lega all'esecuzione su un Mac, ma per noi andava bene. Windows non ha lo stesso problema di massimizzazione per Chrome, quindi se ti interessa puoi fare un OS check.

Ho trovato lo script di apple che ho utilizzato here. Ho copiato sotto nel caso in cui il collegamento rompe mai:

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 

Ho usato questo script (ispirato this question) per attivare la finestra del browser prima:

tell application "Google Chrome" 
    activate 
end tell 

ho eseguito in Java utilizzando questo comando:

Runtime.getRuntime().exec(scriptPath) 

Spero che questo aiuti qualcuno.

2

La soluzione migliore che ho trovato fino ad ora è la seguente:

dopo aver avviato il browser eseguire il seguente codice di

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

spero che aiuta. Sono riuscito a massimizzare Chrome sotto MAC utilizzando questa soluzione.

0

È post molto vecchio, ma ho ancora affrontato questo problema oggi e ho risolto l'utilizzo del codice riportato di seguito.

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

Ho lo stesso problema su MAC.

ho cercato qui di seguito le opzioni, ma non funziona:

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

  2. Qui

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

Finalmente ho trovato sotto soluzione che funziona su tutti i sistemi operativi:

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

Fatemi sapere se qualsiasi richiesta.

0

Si prega di controllare la seguente soluzione, Funzionerà per voi.

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