Окно Chrome для Selen Webdriver всегда начинается с небольшого окна - PullRequest
10 голосов
/ 22 декабря 2011

У меня проблема с использованием веб-драйвера Chrome и Selen 2.Проблема в том, что когда я запускаю сеанс браузера с помощью chromedriver, он всегда запускается в окне, размер которого меньше половины доступной ширины экрана.Поскольку я выполняю тесты на странице, которая изменяется при изменении размера экрана, мои тесты не проходят, потому что я пытаюсь перетащить элемент из верхней части страницы и поместить его в элемент, который находится внизу страницы.Я получаю ошибку прокрутки.Но если окно развернуто, я не получаю эту ошибку.Но проблема в том, что каждый раз, когда chrome запускает новый сеанс через драйвер chrome, он всегда запускается в маленьком окне.Я исследовал множество различных вариантов, чтобы браузер запускался максимально развернутым:

  • Выполните вызов через javascript, чтобы изменить размер окна с помощью window.resizeTo (ширина, высота) ;.Однако, это не работает в более поздних версиях Chrome (или Firefox в этом отношении).
  • Запустите Chrome с ключом --start-maximized.Это работает на Windows, но это ничего не делает на Mac.
  • Запустите Chrome с помощью переключателя, определяющего каталог профиля.Таким образом, профиль будет определять размер окна.--profile-directory = ~ / chromeprofile Это сработало, когда я запустил chrome из командной строки, но если я сделаю это из selenium webdriver / chromedriver, это не будет иметь никакого значения.
  • Когда я пытаюсь:driver.manage (). window (). setSize () Я получаю это исключение:

    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)
    

Какие еще варианты я могу изучить, чтобы добиться этого?Проблема в том, что окно слишком маленькое?Что я могу сделать, чтобы автоматически максимизировать окно каждый раз, когда Chrome запускается через веб-драйвер на Mac?

Ответы [ 8 ]

4 голосов
/ 21 марта 2012

driver.manage (). Window (). SetSize () в настоящее время не будет работать с ChromeDriver (начиная с версии 19).Существует проблема с активным хромом , относящаяся к этому запросу функции.

Текущее решение , как правило, рекомендуется использовать DesiredCapabilities, чтобы установить размер окна, но вы правычто он вообще не работает на Mac.

Единственное решение, которое я нашел, - это открыть новое окно с помощью JavaScript и изменить его размер таким же образом.Это глубоко описано в этой теме на тему .Соответствующий обходной путь показан в приведенном ниже коде:

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

Боюсь, это довольно неуклюже, но у меня он работал локально, используя Chrome на Mac (Lion).

2 голосов
/ 12 июня 2013

Лучшее решение, которое я нашел до сих пор, это следующее:

после запуска браузера запустите следующий код

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

Надеюсь, это поможет. Мне удалось максимизировать Chrome под MAC, используя это решение.

2 голосов
/ 28 марта 2012

То, что вы описали здесь, также относится ко мне.Следуя этой статье , вы можете установить предпочтение для chromedriver при его запуске.

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

Это работало как на Windows, так и на Mac.На Java, однако, я не смог проверить API для установки предпочтения для chromedriver. Вот вопрос , заданный по этому поводу, но, похоже, ответа пока не найдено.

1 голос
/ 12 марта 2013

Я решил эту проблему, выполнив скрипт Apple. Это, конечно, связывает вас с казнью на Mac, но это было хорошо для нас. В Windows нет такой же проблемы максимизации для Chrome, поэтому, если вам интересно, вы можете выполнить проверку OS .

Я нашел скрипт Apple, который использовал здесь . Я скопировал это ниже в случае, если ссылка когда-либо сломается:

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

Я использовал этот скрипт (вдохновленный этим вопросом ), чтобы сначала активировать окно браузера:

tell application "Google Chrome"
    activate
end tell

Я выполнил в Java эту команду:

Runtime.getRuntime().exec(scriptPath)

Надеюсь, это кому-нибудь поможет.

1 голос
/ 22 декабря 2011

driver.manage().window().setSize() - метод, который вы хотите использовать

0 голосов
/ 25 сентября 2017

Пожалуйста, проверьте следующее решение, Это будет работать для вас.

System.setProperty("webdriver.chrome.driver", driverPath);
ChromeOptions options= new ChromeOptions();
options.addArguments("start-fullscreen");
0 голосов
/ 24 февраля 2017

У меня такая же проблема на MAC.

Я пробовал ниже варианты, но не работает:

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

  2. Здесь

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

Наконец-то я нашел ниже решение, которое работает на всех ОС:

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

Дайте мне знать, если какой-либо запрос.

0 голосов
/ 04 декабря 2016

Это очень старая статья, но я столкнулся с этой проблемой сегодня и решил ее с помощью кода ниже.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...