通过单击"发送"按钮提交带有硒的表单将所有设置放回 DOM 树中



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

我写了一个代码,它填写了一个简单的表格(调查;来自 surveymonkey.com(。DOM 树按照我想要的完美方式被更改(操纵(。 但是,一旦我单击button以提交数据(调查/表格(,我就会从调查页面收到错误,即"请回答问题x,y,...,n"。收到此错误后,我验证了DOM Tree,令人惊讶的是,DOM Tree已更改回默认值,因为除了InputTextArea字段之外从未发生过更改 – 这两个节点已从页面接受(从seleniumTextAreaInput字段的操作被接受(。因此,单击Radio ButtonsCheckboxes时的所有操作都已更改回未选中send button.

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

由于DOM树是相同的(硒和真正的客户端(,我认为硒点击事件有问题吗?顺便说一句,我也尝试过,而不是Click(),按Keys.Enter提交表格 - 它也没有用。

以下是调查link(获取DOM Tree(: https://de.surveymonkey.com/r/KZDWJD2?pharmacy=test

示例:对于Radio buttons,我所做的(也是唯一必要的(是将属性aria-checkedfalse更改为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);
}

如前所述,通过上述方法可以完美地更改属性。但是,一旦硒提交调查(通过单击按钮(,attribute就会改回false,因此无法发送调查。

任何帮助或建议将不胜感激。

提前谢谢。

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

相关内容

  • 没有找到相关文章