Столкнулся с интересным моментом: есть поле в проекте под названием «Шаблон проекта». Как видно на скрине - это не просто поле, а оно имеет стрелочку, нажав на которую мы получаем выпадающее меню с ооооогромнейшим списком существующих проектов, из которых нужно выбрать один, созданный заранее. Название - «Автотесты линейный проект».

И первое, что я сделал, это - такой код: WebElement element = driver.findElement(SupportingData.projectTemplateField); if (elenent.isDisplayed() && element.isEnabled()) { element.click(); element.sendKeys(SupportingData.projectName);

Да, поле проверил на кликабельность и затем поставил в него курсор. После этого передал в поле название - «Автотесты линейный проект» методом sendKeys().

Метод передачи не сработал. В режиме дебага я прогнал и понял, что поле не итерабельно… Да как же так? Ведь я имитирую действия пользователя и в режиме пользователя я МОГУ так сделать руками с клавиатуры!

Почему же тогда в режиме имитации пользователя - то есть кодом - так не выходит сделать? Ответа нет…

Ок, не итерабельно? Что ж, есть другой вариант - буду скроллить, открыв список.

Пишу такой код: кликаю на стрелку, чтобы раскрылся список и далее пытаюсь скроллить этот список до нужно элемента в области видимости (поставил для этого - true): WebElement element = driver.findElement(SupportingData.projectTemplateField); ((JavascriptExecutor)driver.).executeScript(«arguments[0].scrollIntoView(true);», name);

Запускаю и - скролла не происходит и снова ошибка, что элемент не итерабельный… Что за факинг булщет?!

Ок, вспоминаю про класс Robot. Когда происходит эмуляция нажатия клавиш (я же ориентируюсь на пользователя, который МОЖЕТ в поле писать слова, значит, и кодом можно писать в поле - логика такая была).

Пишу такое: Robot robot = new Robot(); String str = «ABT»; Достаточно 3-х символов, чтобы в выпадающем меню отобразилось искомое название «Автотесты линейный проект», при этом размер букв не важен. for (char ch : str.toCharArray()) { robot.keyPress(KeyEvent.VK_A); robot.keyRelease(KeyEvent.VK_A); robot.keyPress(KeyEvent.VK_B); robot.keyRelease(KeyEvent.VK_B); robot.keyPress(KeyEvent.VK_T); robot.keyRelease(KeyEvent.VK_T); }

И, о чудо, в поле появились английские буквы «АВТ»! Отлично, эксперимент завершился успехом и осталось вместо латиницы передать русские буквы!

Хер там! Кириллица юникода - постоянная ошибка передачи Invalid key.

Ок, буду кодом переключать раскладку:

robot.keyPress(KeyEvent.VK_SHIFT); robot.keyRelease(KeyEvent.VK_ALT);

Переключил, далее тот же код:

for (char ch : str.toCharArray()) { robot.keyPress(KeyEvent.VK_F); robot.keyRelease(KeyEvent.VK_F); robot.keyPress(KeyEvent.VK_D); robot.keyRelease(KeyEvent.VK_D); robot.keyPress(KeyEvent.VK_N); robot.keyRelease(KeyEvent.VK_N);

«FDN» - (я же перед этим переключил раскладку) соответствует русским буквам «АВТ» (из искомой фразы «Автотесты линейный проект»).

Да, сработало, в поле передаются русские буквы и в выпадающем меню я вижу нужный мне проект, который можно кликнуть отдельным методом и он вставится в поле.

Я возрадовался. Гуд? Ни хера! Тест работает через раз. В первый раз всё ок, на следующий прогон я снова вижу в поле «FDN»!!! Да блять! Почему???

Сварил кофею и тут подумал, а что если передавать не нажатие клавиш, а тупо стрингу из буфера обмена?

Сделал так:

@Step(«Кликаю на поле и передаю данные.») public void projectCreatingFieldClicj() { WebElement element = driver.findElement(SupportingData.projectTemplateField); if (elenent.isDisplayed() || element.isEnabled()) { element.click();

Далее - подключаю буфер обмена: String textToBring = «Автотесты линейный проект»; StringSelection stringSelection = new StringSelection(textToBring); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContent(stringSelection, stringSelection);

А сейчас тупо нажимаю контрл + V :)

robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.VK_V); robot.keyRelease(KeyEvent.VK_CONTROL); robot.keyRelease(KeyEvent.VK_V);

Иииииии -> фсьо заработало!

Вот такой опыт)) Может, кому-то пригодится :)

Столкнулся с интересным моментом: есть поле в проекте под названием «Шаблон проекта» | Сетка — социальная сеть от hh.ru Столкнулся с интересным моментом: есть поле в проекте под названием «Шаблон проекта» | Сетка — социальная сеть от hh.ru