Окно 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.
Я пробовал следующие параметры, но не работает:
Наконец, я нашел ниже решение, которое работает на всех ОС:
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("/");