首页 > 解决方案 > Selenium 替代 Angular JS 页面中的 SendKeys()

问题描述

我正在使用 selenium 自动化来自动化第三方网站。为了在表单中设置输入字段的值,我正在使用该SendKeys()方法。它工作没有任何问题,但问题是表单中有太多输入字段,填写一张表单需要 5-6 秒,我需要像这样填写多个表单。我知道它也可以使用 JavascriptExecutor 自动化,如下所示

IJavaScriptExecutor js = (IJavaScriptExecutor) driver;
js.ExecuteScript("document.getElementById('mobileNum').value = '123456789'");

在这种情况下,问题是网站是有角度的,并且像这样设置值不能正常工作,并且表单不断提示值是空白的(与SendKeys()正常工作时使用不同)

SendKeys那么快速(如JavaScript)和正确(如)填写表单的正确方法应该是什么?

标签: javascriptc#seleniumselenium-webdriver

解决方案


通常像 Angular.js 这样的框架会附加一个事件监听器来做出反应(更新这个输入背后的模型),因此改变 value 属性是不够的,你还需要触发监听器。每个框架都使用不同的事件,对于输入,它可以是input/ change

为此,您可以使用以下方法触发它:

document.getElementById('mobileNum').value = '123456789';
document.getElementById('mobileNum').dispatchEvent(new Event('input', { bubbles: true }))

推荐阅读