Selenide. Не работает метод sendKeys для textarea

В проекте использую selenide 6.2.0

Перестал работать ввод значения в textarea;

Элемент:

<textarea type="text" required="required" id="address"></textarea>

Делая вызов метода для ввода данных:

cryptoAddressInput.sendKeys("address")

В итоге получаю ошибку:

Caused by: WebDriverException: unknown error: Cannot construct KeyEvent from non-typeable key

	at com.codeborne.selenide.ex.UIAssertionError.wrapToUIAssertionError(UIAssertionError.java:103)
	at com.codeborne.selenide.ex.UIAssertionError.wrapThrowable(UIAssertionError.java:86)
	at com.codeborne.selenide.ex.UIAssertionError.wrap(UIAssertionError.java:80)
	at com.codeborne.selenide.impl.SelenideElementProxy.invoke(SelenideElementProxy.java:93)
	at com.sun.proxy.$Proxy106.sendKeys(Unknown Source)
	at org.fxclub.qa.core.pages.upp.payment.common.IWithdrawalPage.inputCryptoAddress(IWithdrawalPage.java:68)
	at tests.ui.upp.WithdrawalRequestsTests.withdrawalWithAntifraud(WithdrawalRequestsTests.java:273)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
	at org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:71)
	at org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:14)
	at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
	at java.util.concurrent.FutureTask.run(FutureTask.java)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
	at java.util.concurrent.FutureTask.run(FutureTask.java)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.openqa.selenium.WebDriverException: unknown error: Cannot construct KeyEvent from non-typeable key
  (Session info: chrome=98.0.4758.80)
Build info: version: '4.1.1', revision: 'e8fcc2cecf'
System info: host: 'strucheva-m-m', ip: '192.168.43.209', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '11.6.1', java.version: '1.8.0_312'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [c8cd8fed50a547e72e016d730bed915b, sendKeysToElement {id=f506cbfe-ff16-48a5-9474-eea78cc0dcae, value=[Ljava.lang.CharSequence;@5ff75b0e}]
Capabilities {acceptInsecureCerts: true, browserName: chrome, browserVersion: 98.0.4758.80, chrome: {chromedriverVersion: 98.0.4758.48 (d869ab3eda606..., userDataDir: /var/folders/h6/q3kd1l956l9...}, goog:chromeOptions: {debuggerAddress: localhost:64524}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: MAC, platformName: MAC, proxy: Proxy(), se:cdp: ws://localhost:64524/devtoo..., se:cdpVersion: 98.0.4758.80, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: ignore, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
Element: [[ChromeDriver: chrome on MAC (c8cd8fed50a547e72e016d730bed915b)] -> id: crypto-address]
Session ID: c8cd8fed50a547e72e016d730bed915b
	at sun.reflect.GeneratedConstructorAccessor48.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:200)
	at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:133)
	at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:53)
	at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:184)
	at org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:167)
	at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:142)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:558)
	at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:251)
	at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:107)
	at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.codeborne.selenide.impl.SelenideElementProxy.dispatchAndRetry(SelenideElementProxy.java:134)
	at com.codeborne.selenide.impl.SelenideElementProxy.invoke(SelenideElementProxy.java:83)

Похоже, у вас в строку “address” закрался какой-то невидимый символ, вот браузер и ругается. Селенид тут не при чём.

Я проверяла дебагом вызов метода sendKeys, что туда передается

Вот, например, сгенерированная строка

Тоже падает ошибка. Но ошибка падает время от времени, те не 100%

Отчего это может зависеть-ума не приложу.
И до перехода на 6ю версию не видела такую ошибку

Плюс к этому, иногда значение не вводится и нет ошибок при этом. Прото игнорируется ввод данных

Видимо, вы вводите какой-то невводимый символ ?.. Или неподдерживаемый ?
Покажите целиком что вводите в textarea.

А вот выше я привела скриншот в комментарии.
Строка содержит цифры и буквы латинские. И все

Да, невидимого символа не видно… :slight_smile:

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

Хотя это какой-то crypto-field… :thinking:

Возможно он блочит какие-то события клавиатуры. Или не до конца проинициализирован ?

Поговорите с фронтендером по поводу этого textarea. Может быть стоят какие-то ограничения ?

Удалось воспроизвести в отдельном проекте
Собрала все необходимое)
Хром у меня 98й версии. Возможно, это важно

ПС. Иногда тест проходит. Правда редко :upside_down_face:

1 лайк

Руками ввод работает. И в этот же момент не работает ввод через sendKeys.
Приложила выше в комментарии ссылку на гит, где воспроизвела. Явно никакие инициализации не происходят. Это просто html страничка

У меня тоже Chrome 98.
И этот конкретный тест проходит стабильно. Уже сто раз перепробовал. :frowning:

Может зависит от ОС? :thinking:
У меня Mac

Он стабилен как никогда :sweat_smile:

1 лайк

О, в другом чатике написали, что это бага хрома 98.

Баг 98 хрома, переключи клавиатуру на английский и будет ок.

2 лайка

:rofl::rofl::rofl: и хром может подвести

1 лайк

Опытным путем выяснили, что баг только на Маке воспроизводится. Надо еще и Мак на что-нибудь переключить :sweat_smile:

И да, при переключении на английскую раскладку все отработало :crazy_face:

Сегодня впервые поймала точно такую же ошибку, но на хроме 97. Но у меня все тесты на английском. Это форма логина, и в 95% тестов все нормально, а в 5% тесты выдают ошибку, хотя метод тот же.

Вроде этот баг из-за того, что хром не пропускает спецсимволы. Например на стаковерфлоу предлагают делить емэйл на две части, печатать в поле сначала первую (до @), потом Keys.SHIFT + 2, потом вторую часть. Так он вставит @.

Какие-то прям танцы с бубном)
У меня даже спецсимволов нет в тексте и вот так себя ведёт

В общем, пришлось версию браузера прописывать: WebDriverManager.chromedriver().driverVersion(“97.0”).setup();

Действительно. Во время запуска тестов - менялся язык на русский. При переключении на английский - тесты перестали падать.

1 лайк