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

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

1 лайк

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


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


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


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

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

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

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

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

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

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

Даже пробовал переписать скрипт на 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)

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

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

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

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