Окно Chrome selenium webdriver всегда начинается с небольшого окна

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

  • Сделать звонок через javascript, чтобы изменить размер окна, используя window.resizeTo(ширина, высота);. Однако это не работает в более поздних версиях хром (или firefox, если на то пошло).
  • Запустите хром с помощью переключателя -start-maximized. Это работает на окнах, но это ничего не делает на Mac.
  • Запустите chrome с помощью переключателя, задающего каталог профиля. Таким образом, профиль будет определять размер окна. --profile-directory = ~/chromeprofile Это сработало, когда я начал хром из командной строки, но если я это сделаю из 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)
    

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

Ответ 1

driver.manage(). window(). setSize() в настоящее время не работает с ChromeDriver (начиная с версии v19). Существует активная проблема хрома, связанная с этим запросом функции.

текущий обходной путь обычно рекомендуется использовать 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);");

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

Ответ 2

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

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 для настройки предпочтения для хромированного ребра. Здесь задан вопрос об этом, но, похоже, ответа пока не найдено.

Ответ 3

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

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

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.

Ответ 4

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

Ответ 5

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

Я нашел яблоко script Я использовал здесь. Я скопировал его ниже, если связь когда-либо ломается:

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

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

tell application "Google Chrome"
    activate
end tell

Я выполнил на Java с помощью этой команды:

Runtime.getRuntime().exec(scriptPath)

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

Ответ 6

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

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

Ответ 7

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

Я пробовал следующие параметры, но не работает:

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

  • Здесь

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

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

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

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

Ответ 8

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

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

Ответ 9

Я использую webdrivermanager и селенид. Для максимизации окна 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("/");