Frankly, I don't understand what is the problem.
I took first answer from your link and it works for me with Chrome
and with text ' This one shall pass '
on page Google.com
from selenium import webdriver
JS_ADD_TEXT_TO_INPUT = """
var elm = arguments[0], txt = arguments[1];
elm.value += txt;
elm.dispatchEvent(new Event('change'));
"""
browser = webdriver.Chrome()
browser.get("https://google.com/")
elem = browser.find_element_by_name('q')
text = ' This one shall pass '
browser.execute_script(JS_ADD_TEXT_TO_INPUT, elem, text)
But if you really need version from JavaScript then you have to only change text in JS_ADD_TEXT_TO_INPUT
from selenium import webdriver
JS_ADD_TEXT_TO_INPUT = """
var elm = arguments[0],
txt = arguments[1];elm.value += txt;
elm.dispatchEvent(new Event('keydown', {bubbles: true}));
elm.dispatchEvent(new Event('keypress', {bubbles: true}));
elm.dispatchEvent(new Event('input', {bubbles: true}));
elm.dispatchEvent(new Event('keyup', {bubbles: true}));
"""
browser = webdriver.Chrome()
browser.get("https://google.com/")
elem = browser.find_element_by_name('q')
text = ' This one shall pass '
browser.execute_script(JS_ADD_TEXT_TO_INPUT, elem, text)
EDIT:
Or maybe your problem is to put it in function
from selenium import webdriver
def sendKeysWithEmojis(element, text):
JS_ADD_TEXT_TO_INPUT = """
var elm = arguments[0],
txt = arguments[1];elm.value += txt;
elm.dispatchEvent(new Event('keydown', {bubbles: true}));
elm.dispatchEvent(new Event('keypress', {bubbles: true}));
elm.dispatchEvent(new Event('input', {bubbles: true}));
elm.dispatchEvent(new Event('keyup', {bubbles: true}));
"""
browser.execute_script(JS_ADD_TEXT_TO_INPUT, elem, text)
# --- main ---
browser = webdriver.Chrome()
browser.get("https://google.com/")
elem = browser.find_element_by_name('q')
text = ' This one shall pass '
sendKeysWithEmojis(elem, text)
OR maybe problem is only on Windows
- I tested on Linux
.
OR maybe problem is Chrome/ChromeDriver
- I tested on Chorme/ChromeDriver 95.0.4638.69