Я использую 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
, и, следовательно, опрос не может быть отправлен.
Любая помощь или совет будут оценены .
Заранее спасибо.