我正在使用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);
}
如前所述,通过上述方法可以完美地更改属性。但是,一旦硒提交调查(通过单击按钮(,attribute
就会改回false
,因此无法发送调查。
任何帮助或建议将不胜感激。
提前谢谢。
经过更多的挖掘,我发现调查猴子为每个输入字段添加了另一个属性:checked="checked"
- 将此属性添加到特定节点元素是解决方案的关键 - 现在可以发送调查。