Python + Selenium Chromedriver. Не получается ввести данные в поле с помощью стандартного метода send_keys()

selenium
python
Теги: #<Tag:0x00007f7b63e363f0> #<Tag:0x00007f7b63e36198>

(Кирилл Савинов) #1

https://nnovgorod.rt.ru/b2b/internet/fix
В блоке “Оставить заявку” не могу заполнить поле “Имя” с помощью стандартного метода Selenium’а send_keys(). Также в поле “Имя” есть валидация, которая позволяет вводить только русские буквы. В поле HTML- атрибут value="" отсутствует. Причем с другими полями блока “Отправить заявку” подойбной проблемы не обнаружено.

Пробовал цепляться по разным локаторам, в т.ч. через id, css и xpath. Причем, курсор в поле встает, но ничего не вводит.
Также, пробовал ввести имя с помощью jQuery. Имя добавляется, но при выполнении дальнейших действий ввод сбрасывается.

Selenium:

driver.find_element_by_xpath("//input[@name='name']").send_keys("Иван")

jQuery:

$('#form-input__control-name').value='Иван';

Скриншоты.


Python 3.6.1
PyTest 3.2.5
Selenium 3.12.0
Chrome 68.0.3440.106
ОС: Windows-2008Server
Chromedriver версия от 20.04.2018


(antonio-33) #2

Может предварительно клинуть по полю?


(marv) #3

element.click().
element.clear()
element.sendKeys(“Some text here”)


Удостоверится что драйвер видит это поле в режиме отладки
Если да то попробовать через Thread.sleep(10000)
возможно что страница не успевает догрузить все жс скрипты и в момент отправки значения в поле не writeble. Тогда в последующем нужно будет предварительно waitForPageLoadComplete


Если скрипт затирает вписанное значение, может банально его последним заполнять перед отправкой?


(Кирилл Савинов) #4

Пробовал предварительно и кликать, и очишать поле, не помогает.


(Кирилл Савинов) #5

Насколько понимаю, пробовал делать все эти вещи на питоне. Пока ничего не подходит.

Насколько вижу по логам автотеста, драйвер видит поле в режиме отладки:

**[** **LINE:486]# 2018-10-22 11:47:15** **INFO** POST http://127.0.0.1:65280/session/08dce0cf4b3cc57cbe2f026e2b637c52/element/0.5646112943827772-2/value {&quot;text&quot;: &quot;\u0418\u0432\u0430\u043d&quot;, &quot;value&quot;: [&quot;\u0418&quot;, &quot;\u0432&quot;, &quot;\u0430&quot;, &quot;\u043d&quot;], &quot;id&quot;: &quot;0.5646112943827772-2&quot;, &quot;sessionId&quot;: &quot;08dce0cf4b3cc57cbe2f026e2b637c52&quot;};

**[LINE:573]# 2018-10-22 11:47:15** **INFO** Finished Request;

Обновление хрома и хромдрайвера до последних версий также не помогло.


(Кирилл Савинов) #6

Даже пробовал переписать скрипт на Python+Selene, но все осталось по-прежнему.

Код:

from selene.api import *
import time

config.browser_name = "chrome"

browser.open_url("https://nnovgorod.rt.ru/b2b/internet/fix")

s("div.promo__actions > a").click()
time.sleep(5)
s("#form-input__control-name").click()
s("#form-input__control-name").clear()
time.sleep(3)
s("#form-input__control-name").set("Привет")
s("#form-input__control-name").set_value("Привет")
s("#form-input__control-name").send_keys("Привет")
time.sleep(3)

Вставка из буфера годного текста тоже не проходит:

from selenium.webdriver import ActionChains
driver.instance.find_element_by_xpath("//input[@name='name']").click()
time.sleep(5)
ActionChains(driver.instance) \
    .key_down(Keys.CONTROL) \
    .send_keys("v") \
    .key_up(Keys.CONTROL).perform()
time.sleep(5)

(Maxim Zaitsev) #7

Какой-то ужОс. Тоже не получается заполнить поле ни через send_keys, ни через js (слетает значение).
Пока удалось выяснить, что сайт использует фреймворк vue.js. Какая-то заморочка с состоянием приложения …


(Кирилл Савинов) #8

О, уже что-то. Спасибо!
Параллельно пробую пушить разрабов, чтобы они что-то поправили или подсказали, но пока они не придумали как это оптимальнее пофиксить.


(Maxim Zaitsev) #9

Хмм, я думал, это просто случайный сайт для тренировки навыков…
Если есть доступ к разработчикам, то, конечно, надо уже через них решать вопрос.


(Кирилл Савинов) #10

В итоге так и решили. Разработчиков убрали валидацию на ТЕСТе, чтобы это можно было автоматизировать. Спасибо за ответы!