Отправка формы с помощью Selenium путем нажатия кнопки «Отправить» возвращает все настройки в дерево DOM. - PullRequest
0 голосов
/ 18 июня 2020

Я использую Selenium с .NET. Я использую WebDriver ChromeDriver.

Я написал код, который заполняет простую форму (опрос; с сайта Surveymonkey.com). Дерево DOM изменяется (манипулируется) идеально, как я хочу. Но как только я нажимаю button для отправки данных (опроса / формы), я получаю сообщение об ошибке на странице опроса, то есть «пожалуйста, ответьте на вопросы x, y, ..., n». Я проверил DOM Tree после получения этой ошибки, и, что удивительно, DOM Tree вернулся к значениям по умолчанию, так как никогда не было изменений, кроме полей Input и TextArea - эти два узла были приняты от страницы (допущены манипуляции с полями selenium на TextArea и Input). Таким образом, все манипуляции с Radio Buttons и Checkboxes снова изменились на отключенные при нажатии на send button.

Что я сделал: я установил breakpoint перед нажатием на кнопку, скопировал DOM Tree и сравнил его с DOM Tree реального клиента: не было никакой разницы, кроме meta node (некоторые query parameters сценария). Так что я действительно был сбит с толку, почему опрос работает не с селеном, а с реальным клиентом, хотя дерево DOM такое же. Поэтому я попробовал это с другим драйвером (с IE и Firefox) - у меня была точно такая же проблема.

Поскольку дерево DOM одинаковое (селен и реальный клиент), я думаю, что есть проблема с событием щелчка селена? Кстати, я также пробовал вместо Click() отправить форму по Keys.Enter - тоже не сработало.

Вот link опроса (чтобы получить DOM Tree ): https://de.surveymonkey.com/r/KZDWJD2?pharmacy=test

Пример: для Radio buttons я сделал (и единственное, что необходимо) изменил / манипулировал атрибутом aria-checked с false на true. Как только я отправил опрос, этот атрибут снова изменится на false, что мне кажется очень странным и, следовательно, не может быть отправлено в серверную часть (сообщение в интерфейсе: 'пожалуйста, ответьте на вопрос 1,2, ..., n).

Вот код из моего C#: Изменение указанного выше атрибута: `

public static void SetAttribute(this IWebElement webElement, string name, string value)
        {
            var driver = ((IWrapsDriver)webElement).WrappedDriver;
            var jsExecutor = (IJavaScriptExecutor)driver;
            jsExecutor.ExecuteScript("arguments[0].setAttribute(arguments[1], arguments[2]);", webElement, name, value);
        }

Как уже упоминалось, атрибут полностью изменяется указанным выше методом. Но как только Selenium отправит опрос (нажав на кнопку), attribute изменится обратно на false, и, следовательно, опрос не может быть отправлен.

Любая помощь или совет будут оценены .

Заранее спасибо.

1 Ответ

0 голосов
/ 18 июня 2020

После еще нескольких копаний я обнаружил, что эта обезьяна-обследователь добавляет еще один атрибут к каждому полю ввода: checked="checked" - добавление этого атрибута к определенным c узловым элементам было ключом к решению - теперь опрос можно отправить .

...