Как отключить нативный набор текста в Chrome

java
selenium
Теги: #<Tag:0x00007f7b68ef1830> #<Tag:0x00007f7b68ef16f0>

(Александр Викторович) #1

Доброго часа всем.

Коллеги, подскажите, как для браузерa GoogleChrome отключить нативный набор текста в поле. То есть, чтобы текст, который отправляется в филд методом sendKeys(), печатался не посимвольно, а целиком вставлялся. Тесты написаны на Selenium+Java+ и тд.

Я попытался сделать так:

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("nativeEvents", false);
return new ChromeDriver(capabilities);

не сработало.

chrome


(Vladislav Abramov) #2

сделайте перегрузку метода sendkeys, который будет текст из переменной не вводить, а вставлять, контрол+в делать в буквальном смысле

селениум же действия человека имитирует, потому и вводит посимвольно

тексты большие вводите и очень долго это происходит?


(Александр Викторович) #3

Думал над таким решением. Но оно не совсем практично. Думаю, эту проблему можно решить на уровне опций Хрома, тк в Мозиле текст в филды вводится сразу целиком.

Да, хочу таким образом оптимизировать тесты.


(Vladislav Abramov) #4

https://peter.sh/experiments/chromium-command-line-switches/

возможно, здесь будет ключ, который управляет вводом текста


(Vasiliy Rakshin) #5

Делайте полям инпут сет валуе через javascript


(Александр Викторович) #6

Не удалось найти ничего подходящего.
Если на уровне конфигураций сделать нельзя, то воспользуюсь вариантом, предложенным BabyRoot


(asolntsev) #7

Мой классический совет - используйте Selenide.
Там есть специальная опция для этого: Configuration.fastSetValue = true;
Как раз подменяет sendKeys() так, что он забивает значение через JavaScript.


(Vladislav Abramov) #8

ну так я тоже самое по сути и советовал, так как ctrl+v нынче нажатиями клавиш никак не отправить селениумом, то только джсом и остается скрипты выполнять


(Yaroslav Pernerovskyy) #9

Нет, никакими опциями Хрома этого не изменить ))


(Александр Викторович) #10

На счет Selenide - нужно реструктуризировать проект. Задача не на пару дней. Спасибо, возьму на заметку.

Мне кажется, что использовать setValue более безопасно, т.к. при запуске тестов параллельно - может возникать путаница и значение для одного поля отправится из буфера в другое (в параллельном тесте)


(Александр Викторович) #11

Спасибо. На конференции от оратора услышал обратное. Вот и начал искать.


(asolntsev) #12

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


(Сергей Кузьмин) #13

@asolntsev а ведь для супер быстрого ввода текста достаточно одного метода
https://sqa.stackexchange.com/questions/29790/selenium-webdriver-faster-way-to-fill-textboxes-than-sendkeys или с проверками аттрибутов получателя как сделано в selenide - зачем тащить весь прокси фреймворк ( у selenide может быть имеются другие достоинства о которых я просто пока не знаю …

// based on: https://github.com/selenide/selenide/blob/master/src/main/java/com/codeborne/selenide/commands/SetValue.java
var setValue = function(element, text) {
if (element.getAttribute('readonly') != undefined) return 'Cannot change value of readonly element';
if (element.getAttribute('disabled') != undefined) return 'Cannot change value of disabled element';
element.focus();
var maxlength = element.getAttribute('maxlength') == null ? -1 : parseInt(element.getAttribute('maxlength'));
element.value = maxlength == -1 ? text : text.length <= maxlength ? text : text.substring(0, maxlength);
return null;
}

var selector = arguments[0];
var text = arguments[1];
var nodes = window.document.querySelectorAll(selector);
if (nodes) { 
  setValue(nodes[0], text);
}
return;

я измкенил сигнатуру с WebElement, Stirng на String, String

protected void fastSetText(String selector, String text) {
		String script = getScriptContent("setValueWithSelector.js");
		try {
			executeScript(script, selector, text);
		} catch (Exception e) {
			System.err.println("Ignored: " + e.toString());
		}
	}

(asolntsev) #14

@sergueik Ну понятное дело, у него есть 100500 достоинств :slight_smile: Естественно, это не единственное.
Прежде всего - стабильность тестов, см. https://www.youtube.com/watch?v=zOiSo1hYjF8 (отрывок 5:30 - 11:50)

А так да, для конкретно этой задачи достаточно скопировать к себе один этот метод. Но Селенид и состоит из кучи таких маленьких полезных методов. Можно, конечно, их все потихонечку копировать. Если ёжику нравится колоться - кто ж запретит.


(Сергей Кузьмин) #15

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

YoutuБe at work against bank policies


(asolntsev) #16

Так вот же, ссылка выше как раз и рассказывает. Разберитесь уж как-нибудь с ютубом.

Ну ок, тут есть и текстовая расшифровка: https://habr.com/company/jugru/blog/416757/

тут есть ещё слайды на английском: https://docs.google.com/presentation/d/1kuzqR8JGnVKIs2r0Bm83LdOfbZkSkoR93f1c8wd26ns/edit?usp=sharing


(Александр Викторович) #17

Андрей, а назовите, пжл, недостатки фрейма. Возможно то, над чем вы работаете.


(asolntsev) #18

Так это ж всё в гитхабе видно: https://github.com/selenide/selenide/issues

Так чтобы прямо недостатков нет. Есть пожелания. :slight_smile:


(Volodymyr Romanyshyn) #19

Селенидов Селенид, селенидилил Селеняд,
Селенята сенидили селениды селениды.

Как я вижу, вопрос был задан “Как отключить…” а не “Что использовать…” :wink:


(asolntsev) #20

А если ребёнок вас спросит, как максимально быстро перебежать дорогу на красный свет, вы будете отвечать прямо на поставленный вопрос?