通过单击“发送”按钮使用 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
已更改回默认值,因为除了 Input
和 TextArea
字段外,从未有过任何更改– 这两个节点已被页面接受(从 selenium
到 TextArea
和 Input
字段的操作已被接受)。因此,当单击 send button
.
时,对 Radio Buttons
和 Checkboxes
的所有操作都已更改回未选中状态
我做了什么:
我在单击按钮之前设置了一个 breakpoint
,复制了 DOM Tree
并将其与真实客户端的 DOM Tree
进行了比较:除了 meta node
(一些 query parameters
脚本)。
所以我真的很困惑,即使 DOM 树是相同的,为什么调查不适用于 selenium 而适用于真正的客户。
因此,我尝试使用另一个驱动程序(IE
和 Firefox
)——我遇到了完全相同的问题。
由于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-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
,因此无法发送调查。
如有任何帮助或建议,我们将不胜感激。
提前致谢。
经过更多的挖掘,我发现调查猴子向每个输入字段添加了另一个属性:checked="checked"
- 将此属性添加到特定节点元素是解决方案的关键 - 现在可以进行调查已发送。
我正在使用 Selenium
和 .NET
。
我使用的 WebDriver 是 ChromeDriver
.
我写了一个代码,它填写了一个简单的表格(调查;来自surveymonkey.com)。 DOM 树完全按照我的意愿进行了更改(操作)。
但是,一旦我点击 button
提交数据(survey/form),我就会从调查页面收到错误消息,即“请回答问题 x,y,... ,n。我在收到此错误后验证了 DOM Tree
,令人惊讶的是,DOM Tree
已更改回默认值,因为除了 Input
和 TextArea
字段外,从未有过任何更改– 这两个节点已被页面接受(从 selenium
到 TextArea
和 Input
字段的操作已被接受)。因此,当单击 send button
.
Radio Buttons
和 Checkboxes
的所有操作都已更改回未选中状态
我做了什么:
我在单击按钮之前设置了一个 breakpoint
,复制了 DOM Tree
并将其与真实客户端的 DOM Tree
进行了比较:除了 meta node
(一些 query parameters
脚本)。
所以我真的很困惑,即使 DOM 树是相同的,为什么调查不适用于 selenium 而适用于真正的客户。
因此,我尝试使用另一个驱动程序(IE
和 Firefox
)——我遇到了完全相同的问题。
由于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-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
,因此无法发送调查。
如有任何帮助或建议,我们将不胜感激。
提前致谢。
经过更多的挖掘,我发现调查猴子向每个输入字段添加了另一个属性:checked="checked"
- 将此属性添加到特定节点元素是解决方案的关键 - 现在可以进行调查已发送。