Невозможно отправить ключи в элемент div Selenium - Java - PullRequest
0 голосов
/ 30 сентября 2018

Привет, я пытаюсь заполнить значение в текстовое поле (проверьте изображение ниже), используя xpath.

Actions actions = new Actions(driver);
                                        actions.moveToElement(driver.findElement(By.xpath("//*[@class='CzI8E']")));
                                        actions.click();
                                        Thread.sleep(3000);
                                        actions.moveToElement(driver.findElement(By.xpath("//*[@class='_2S1VP copyable-text selectable-text']")));//_2S1VP copyable-text selectable-text
                                        actions.sendKeys(WhatsappConstants.TEXT_MESSAGE);
                                        actions.build().perform();

Но я получаю это исключение

org.openqa.selenium.WebDriverException: unknown error: ChromeDriver only supports characters in the BMP

Другие ответы на вопросы stackoverflow сказали, что используют драйвер Firefox, но в моем случае мне нужно, чтобы вы использовали только Chrome.

enter image description here

1 Ответ

0 голосов
/ 10 ноября 2018

Это известное ограничение Chromedriver, см. http://crbug.com/chromedriver/2269 для отчета об ошибке в официальном трекере ошибок.

Что вы можете сделать, это ограничить себя только поддерживаемыми символами, в основном теми,from: http://www.columbia.edu/kermit/ucs2.html

В качестве альтернативы, вы можете смоделировать ввод вместо реальной отправки ключей с использованием внешнего JS-фрагмента, как показано ниже:

(function (element, text) {
    Array.prototype.forEach.call(text, function (char) {
        element.value += char;
        element.dispatchEvent(new KeyboardEvent("keydown"));
        element.dispatchEvent(new KeyboardEvent("keypress"));
        element.dispatchEvent(new KeyboardEvent("input"));
        element.dispatchEvent(new KeyboardEvent("keyup"));
    });
}).apply(null, arguments);

Который вы затем вызываете с помощью JavascriptExecutor :

((JavascriptExecutor) driver).executeScript(JS_CODE, element, text);

Фрагмент работает на элементах с записываемым свойством .value, его можно расширить для поддержки contenteditable элементов.

Обратите внимание, что полядля событий установлены значения по умолчанию, включая коды клавиш и т. д., см. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent Также вам может потребоваться добавить дополнительные события, которые будут запускаться, чтобы еще лучше имитировать пользовательский ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...