Selenium C# Nunit3 Element not visible так как вне зоны виидмости и браузер не скролит
Заускаю тест на локальной машине.
Открывается браузер, максимизируется на весь экран и тест проходит успешно.
Этот же тест запускается на удаленной машине. И падает с ошибкой Element not visible . Сделала скрин во время падения - выяснилось что или браузер не раскрылся максимально, или запуск тестов происходит в каким-то дефолтными мини-разрешением. Кнопку которую нужно нажать за пределами, т.е. появляется скрол и нужно скролить. Открывала приложение на удаленной машине в браузере - все ок. Все кнопки видны.
почему то кажется что service account профиль не дает того размера десктопа что ваш интерактивный юзер профиль
а что за тест такой что тольно на видимом экране элементы отрабатывает без ошибочно - это хорошие best тестинг практики или нет ?
мне всегда же кажется можно переместить таргет в видимую часть страницы или нет. Кажется я что то неправильно понял пожалуйста разъясните
В начале происходит Set up:
Driver = new ChromeDriver();
ChromeOptions options = new ChromeOptions();
options.AddArgument("--start-maximized");
Driver = new ChromeDriver(options);
((IJavaScriptExecutor)Driver).ExecuteScript("window.resizeTo(1920, 1080);");
//test manufacturing
Driver.Navigate().GoToUrl("https://mypage.net/#/login");
и через какао-то время тест падает
Error Message:
OpenQA.Selenium.ElementNotVisibleException : element not interactable
(Session info: chrome=69.0.3497.100)
(Driver info: chromedriver=2.42.591088 (7b2b2dca23cca0862f674758c9a3933e685c27d5),platform=Windows NT 10.0.10240 x86_64)
Локально это тест отрабатывает и Chrome открывается на полный экран.
Запустила тест на удаленной машине и скрин ошибки показал что окно браузера маленькое и кнопка не попадает в поле видимости 2018-10-09_1030.
Т.е фактически кнопка Save она там одна. В приложении эта форма вызывается и из других мест, и она там поменьеш и соответственно те тесты отрабатывают, так как кнопка видимая. И если бы проблема была только в одной кнопке. Таким образом отрезается еще часть полей\дропдайнов\кнопок в других тестах.
Главный вопрос, почему не открывается максимальное окно браузера. Если просто запускаешь Chrome - браузер открыватеся сразу в максимальном размере, а автоматически - нет.
Смотря как вы запускаете браузер на удаленной машине.
Если из-под службы, которая работает от системы - тогда оно никогда не откроется в большом размере. (типичный случай когда нода на CI Jenkins работает как Windows Service).
По скриншоту непонятно, где должна быть кнопка-то?
Ну и по-моему вы слишком заморочено меняете размеры браузера, ведь можно куда проще:
DriverManager.Driver.Manage().Window.Size = new Size(1920, 1080);
DriverManager.Driver.Manage().Window.Maximize();
Вы пробовали сначала переместиться к элементу, прежде чем кликнуть? Или ожидать пока он станет видимым?
var actions = new Actions(driver);
actions.MoveToElement(element);
actions.Perform();
Попробуйте (IJavaScriptExecutor)Driver.ExecuteScript(“window.scrollTo(0,document.body.scrollHeight);”);
У меня работает.
Если не получится, пробуйте через new Actions(Driver).MoveToElement(element).Click().Perform();
@Noksa@Ihor_Kokhan Попробовала принудительно задавать размер окна, максимизировать, настраивать установки Crome на машине, на которой запускаются тесты. Ничего не помогло.
Сработало только Actions(Driver).MoveToElement(element).Click().Perform();
Но в этом случае мне нужно сделать свой метод Click2, который будет включать Actions(Driver).MoveToElement(element).Click().Perform(); + Click(). И вызывать именно этот клик во всех проблемных местах.
@Ihor_Kokhan а конечно, можно сделать замену по всему проекту. Но как?
Например :
list.btnDelete.Click();
т.е. мне нужно Actions(Driver).MoveToElement(list.btnDelete).Click().Perform();
Или я не правильно поняла?
именно.
Заходите в студию. Нажимаете ctrl+F. Потом стрелочку в левом верхнем углу диалога чтоб свичнутся на реплейс. И меняете current document на Entire Solution. Скриншот диалога лепил выше.