#javascript #python #selenium #textarea
#javascript #питон #селен #текстовое поле
Вопрос:
Hei,
Я пытаюсь написать что-то внутри элемента textarea с помощью python selenium и javascript: js — это: self.driver.execute_script("document.getElementsByClassName('textarea').value='tesssst';")
Но он не получает текст там, и я пробовал использовать другие элементы get с помощью (..).
Это работает, если я использую self.driver.find_element_by_css_selector("textarea").send_keys(code)
или с помощью xpath. Но проблема с этим методом заключается в том, что переменная ‘code’ довольно большая, а javascript работает быстрее. Кроме того, если я использую
send_keys(keys.control c/v)
это дает мне дополнительную точку в начале текста, и я понятия не имею, почему это вообще произошло. Какие-нибудь предложения?
Ответ №1:
self.driver.execute_script( "$('pre#editor').text("jsdasdsjj");")
Или
self.driver.execute_script( "arguments[0].text('tesssst');",self.driver.find_element_by_css_selector("pre#editor"))
используйте textContent для установки значения
Комментарии:
1. Это никоим образом не работает, и ‘text(‘tesssst’);» я думаю, что это вообще не тот формат. Возможно, text=’tesssst’;, но в любом случае, это не работает.
2. testarea — это не имя класса, а имя тега
3. Это все еще не работает. Я могу написать, если использую send_keys, используя xpath(‘/html/body / form /div[4] / div / pre/textarea’) или css_selector(«textarea») , но я все еще не могу найти его с помощью jscript. Wtf продолжается?!
4. Вы пробовали первый ответ $(‘textarea’).textContent =»что-то»
5. Я попробовал это в том формате, в котором вы это написали. Не уверен, должен ли я добавить что-то раньше $
Ответ №2:
getElementsByClassName возвращает массив, поэтому я думаю, вам нужно получить первый элемент этого массива. Попробуйте использовать следующий код:
driver.execute_script('document.getElementsByClassName("className")[0].value="yourValue"')
Комментарии:
1. Это не сработает, даже если я изменю значение на text или textContent.
2. Какой класс элемента вы пытаетесь ввести? Вам нужно заменить className на это
3. Я обновил изображения в главном сообщении. Итак, редактор ace — это то, что отображает мою текстовую область. Значение содержит в атрибуте value текст, который я хочу отредактировать. Внутри Chrome, используя инструменты разработчика, мне не разрешено вручную изменять значение, потому что оно говорит, что оно слишком большое.
4. Я видел изображения, замените «className» на «ace_text-input», это должно сработать
5. Я попробовал, и это не сработало. Таким образом, я не могу получить его не через send_keys (а send_keys работает с xpath или css-селектором)
Ответ №3:
Я опробовал варианты, представленные в ответе PDHide, и, наконец, для меня сработало следующее:
self.driver.execute_script( "arguments[0].value = 'tesssst';",self.driver.find_element_by_css_selector("pre#editor"))
Для справки, я использую selenium версии 3.1.4, версию chrome: 91.0.4472.114 и ChromeDriver 91.0.4472.19