Окно Chrome webdriver Mac всегда начинается с маленького окна

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

  • Сделайте вызов через javascript, чтобы изменить размер окна, используя window.resizeTo (width, height) ;. Однако это не работает в более поздних версиях Chrome (или Firefox, если на то пошло).
  • Запустите Chrome с помощью переключателя --start-maximized. Это работает в Windows, но ничего не делает на Mac.
  • Начните хром с переключателя, указывающего каталог профиля. Таким образом, профиль будет определять размер окна. --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?


person justspamjustin    schedule 22.12.2011    source источник


Ответы (9)


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

person yurodivuie    schedule 21.03.2012
comment
Спасибо! У меня это сработало, но я пропустил перемещение и изменение размера. Я просто инициализировал его с помощью js.executeScript("window.open('','testwindow','width=1280,height=800,top=0,left=0')"); (например, используя ваши значения). - person Keith Bentrup; 29.03.2012
comment
setSize() теперь, похоже, отлично работает на Mac, однако при запуске набора тестов я обнаружил, что в какой-то случайный момент, после, может быть, четырех из пяти выполненных тестов, размер становится очень странным (например, 917 в ширину, когда я установил 1200). Чтобы этого избежать, вызывайте driver.manage().window().setPosition(new Point(0, 0)); перед вызовом setSize(). Это недавно упоминалось в этом старом отчете об ошибке Selenium: code.google .com / p / selenium / issues / detail? id = 174 # c55. - person RedYeti; 11.04.2015

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

Рубин:

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. Вот вопрос, о котором спрашивают но, похоже, ответа пока нет.

person KailuoWang    schedule 28.03.2012

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

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

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.

person dan2006112    schedule 12.06.2013

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

person Amey    schedule 22.12.2011
comment
Я заметил, что это работает для firefoxdriver, но не для драйвера Chrome. С хромированной отверткой я получаю исключение, показанное в моем сообщении. - person justspamjustin; 23.12.2011

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

Я нашел сценарий 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)

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

person Marquee    schedule 11.03.2013

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

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);
person Chirag Khimani    schedule 04.12.2016

У меня такая же проблема на 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");

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

person Sagar007    schedule 24.02.2017

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

System.setProperty("webdriver.chrome.driver", driverPath);
ChromeOptions options= new ChromeOptions();
options.addArguments("start-fullscreen");
person Bipin Kumar Chaurasia    schedule 25.09.2017

Я использую webdrivermanager и selenide. Чтобы развернуть окно, Configuration.startMaximized = true

import io.github.bonigarcia.wdm.ChromeDriverManager;
import com.codeborne.selenide.Configuration;
import io.github.bonigarcia.wdm.DriverManagerType;

import static com.codeborne.selenide.Selenide.open;

public class Main {

    public static void main(String[] args) {
        ChromeDriverManager.getInstance(DriverManagerType.CHROME).version("76.0.3809.126").setup();
        Configuration.baseUrl = "https://www.google.com/";
        Configuration.startMaximized = true;
        open("/");
person Lukyanov Mikhail    schedule 31.08.2019