2011-12-22 8 views
10

Mam problem z korzystaniem z webbooka Chrome i selenu 2. Problem polega na tym, że kiedy uruchamiam sesję przeglądarki przy użyciu chromedriver, zawsze rozpoczyna się ona w oknie o wielkości mniejszej niż połowa dostępnej szerokości ekranu. Ponieważ przeprowadzam testy na stronie, która zmienia się po zmianie rozmiaru ekranu, moje testy kończą się niepowodzeniem, ponieważ próbuję przeciągnąć element z góry strony i upuścić go do elementu znajdującego się u dołu strony. Pojawia się błąd przewijania. Ale jeśli okno jest zmaksymalizowane, to nie dostaję tego błędu. Ale problem polega na tym, że za każdym razem, gdy chrome rozpoczyna nową sesję za pomocą sterownika chrome, zawsze zaczyna się w małym oknie. Zbadałem wiele różnych opcji, aby przeglądarka zaczęła zmaksymalizować:Okna chrome Mac selenium webdriver zawsze zaczynają się od małego okna

  • Wykonaj połączenie za pośrednictwem javascript, aby zmienić rozmiar okna za pomocą window.resizeTo (szerokość, wysokość) ;. Jednak nie działa to w późniejszych wersjach chrome (lub firefox).
  • Zacznij chrom z przełącznikiem - zmaksymalizowany start. Działa to w systemie Windows, ale to nie robi nic na mac.
  • Uruchom chrome za pomocą przełącznika określającego katalog profilu. W ten sposób profil definiuje rozmiar okna. --profile-directory = ~/chromeprofile To działało, gdy uruchomiłem chrome z wiersza poleceń, ale jeśli zrobię to z selenu webdriver/chromedriver to nie robi żadnej różnicy.
  • Kiedy próbuję:.. Driver.manage (okno)() setSize() otrzymuję ten wyjątek:

    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) 
    

Jakie inne opcje mogłem zbadać, aby osiągnąć ten cel? Problem polega na tym, że okno jest za małe? Co mogę zrobić, aby automatycznie maksymalizować okno za każdym razem, gdy Chrome uruchamia się przez webdriver na Macu?

Odpowiedz

1

driver.manage().window().setSize() jest metoda chcesz użyć

+0

Zauważyłem, że działa to w przypadku sterownika firefoxdriver, ale nie w przypadku sterownika Chrome. Z chromiedriver dostaję wyjątek pokazany w moim poście. – justspamjustin

4

driver.manage(). Okno(). SetSize() nie pracuje obecnie z ChromeDriver (od V19). Istnieje active chromium issue dotyczące tej prośby o funkcję.

Ogólnie zaleca się użycie funkcji DesiredCapabilities w celu ustawienia rozmiaru okna, ale masz rację, że w ogóle nie działa na komputerze Mac.

Jedynym znalezionym rozwiązaniem jest otwarcie nowego okna przy użyciu JavaScript i zmiana rozmiaru nowego okna w ten sam sposób. Jest to opisane głęboko w this thread on the topic. Odpowiedni obejście jest pokazany na poniższym kodzie:

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

Obawiam się, że to dość niezgrabne, ale pracował dla mnie lokalnie przy użyciu Chrome na Mac (Lion).

+0

Dzięki! To działało dla mnie, ale pominąłem ruch i zmieniłem rozmiar. Właśnie zainicjowałem go za pomocą 'js.executeScript (" window.open ('', 'testwindow', 'width = 1280, height = 800, top = 0, left = 0') ");' (używając twoich wartości na przykład). –

+0

'setSize()' wydaje się teraz działać poprawnie na Macu, jednak podczas uruchamiania zestawu testów odkryłem, że w pewnym losowym momencie, po wykonaniu czterech z pięciu testów, rozmiar staje się bardzo dziwny (jak 917 szerokości po ustawieniu) 1200). Aby tego uniknąć, wywołaj 'driver.manage(). Window(). SetPosition (new Point (0, 0));' _before_ wywołanie 'setSize()'.Zostało to ostatnio wspomniane w tym starym raporcie błędów selenu: https://code.google.com/p/selenium/issues/detail?id=174#c55 – RedYeti

2

To, co tu opisałeś, również dotyczyło mnie. Po ustawieniu this article, możesz ustawić preferencje dla chromiedriver podczas uruchamiania.

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 

To działało na Windows i Mac. Na Javie nie mogłem jednak zweryfikować interfejsu API w celu ustawienia preferencji dla chromiedriver. Here is a question pytanie o to, ale wydaje się, że nie znaleziono jeszcze odpowiedzi.

1

Rozwiązałem ten problem, wykonując skrypt Apple. To oczywiście wiąże cię z egzekucją na Macu, ale to było dla nas w porządku. Windows nie ma takiego samego problemu z maksymalizacją w Chrome, więc jeśli masz na to ochotę, możesz wykonać numer OS check.

Znalazłem skrypt Apple, którego używałem here. Skopiowałem go poniżej w przypadku łącza nigdy przerywa:

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 

użyłem tego skryptu (inspirowany this question), aby uaktywnić okno przeglądarki pierwsze:

tell application "Google Chrome" 
    activate 
end tell 

I wykonany w języku Java za pomocą tego polecenia:

Runtime.getRuntime().exec(scriptPath) 

Mam nadzieję, że to komuś pomaga.

2

Najlepszym rozwiązaniem znalazłem do tej pory to:

po uruchomieniu przeglądarka uruchomić następujący kod

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

Mam nadzieję, że to pomaga. Udało mi się zmaksymalizować Chrome pod MAC używając tego rozwiązania.

0

Jest to bardzo stary post, ale nadal stanąłem w obliczu tego problemu dzisiaj i rozwiązano używając poniższego kodu.

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

Mam ten sam problem na Mac.

Próbowałem poniżej opcji, ale nie działa:

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

  2. Tutaj

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

W końcu znalazłem poniżej rozwiązanie, które działa na wszystkich OS:

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

mi znać, jeśli każde zapytanie.

0

Proszę sprawdzić następujące rozwiązanie, To będzie działać dla Ciebie.

System.setProperty("webdriver.chrome.driver", driverPath); 
ChromeOptions options= new ChromeOptions(); 
options.addArguments("start-fullscreen"); 
Powiązane problemy