通过单击“发送”按钮使用 Selenium 提交表单会将所有设置放回 DOM 树中

Submitting Form with Selenium by Clicking on the Send Button puts all Settings back in the DOM Tree

我正在使用 Selenium.NET。 我使用的 WebDriver 是 ChromeDriver.

我写了一个代码,它填写了一个简单的表格(调查;来自surveymonkey.com)。 DOM 树完全按照我的意愿进行了更改(操作)。 但是,一旦我点击 button 提交数据(survey/form),我就会从调查页面收到错误消息,即“请回答问题 x,y,... ,n。我在收到此错误后验证了 DOM Tree,令人惊讶的是,DOM Tree 已更改回默认值,因为除了 InputTextArea 字段外,从未有过任何更改– 这两个节点已被页面接受(从 seleniumTextAreaInput 字段的操作已被接受)。因此,当单击 send button.

时,对 Radio ButtonsCheckboxes 的所有操作都已更改回未选中状态

我做了什么: 我在单击按钮之前设置了一个 breakpoint,复制了 DOM Tree 并将其与真实客户端的 DOM Tree 进行了比较:除了 meta node(一些 query parameters 脚本)。 所以我真的很困惑,即使 DOM 树是相同的,为什么调查不适用于 selenium 而适用于真正的客户。 因此,我尝试使用另一个驱动程序(IEFirefox)——我遇到了完全相同的问题。

由于DOM树是一样的(selenium和real client),我觉得是selenium的Click事件有问题?顺便说一句,我也尝试过,而不是 Click(),通过 Keys.Enter 提交表单 - 它也没有用。

这里是调查的link(得到DOM Tree):https://de.surveymonkey.com/r/KZDWJD2?pharmacy=test

示例:对于 Radio buttons,我所做的(也是唯一必要的事情)是 changing/manipulating 属性 aria-checkedfalsetrue.我一提交调查,这个属性就变回 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,因此无法发送调查。

如有任何帮助或建议,我们将不胜感激。

提前致谢。

经过更多的挖掘,我发现调查猴子向每个输入字段添加了另一个属性:checked="checked" - 将此属性添加到特定节点元素是解决方案的关键 - 现在可以进行调查已发送。