javascript - Selenium 替代 Angular JS 页面中的 SendKeys()
问题描述
我正在使用 selenium 自动化来自动化第三方网站。为了在表单中设置输入字段的值,我正在使用该SendKeys()
方法。它工作没有任何问题,但问题是表单中有太多输入字段,填写一张表单需要 5-6 秒,我需要像这样填写多个表单。我知道它也可以使用 JavascriptExecutor 自动化,如下所示
IJavaScriptExecutor js = (IJavaScriptExecutor) driver;
js.ExecuteScript("document.getElementById('mobileNum').value = '123456789'");
在这种情况下,问题是网站是有角度的,并且像这样设置值不能正常工作,并且表单不断提示值是空白的(与SendKeys()
正常工作时使用不同)
SendKeys
那么快速(如JavaScript)和正确(如)填写表单的正确方法应该是什么?
解决方案
通常像 Angular.js 这样的框架会附加一个事件监听器来做出反应(更新这个输入背后的模型),因此改变 value 属性是不够的,你还需要触发监听器。每个框架都使用不同的事件,对于输入,它可以是input
/ change
。
为此,您可以使用以下方法触发它:
document.getElementById('mobileNum').value = '123456789';
document.getElementById('mobileNum').dispatchEvent(new Event('input', { bubbles: true }))
推荐阅读
- node.js - 从 AWS S3 Select 获取单个记录时获取 OverMaxRecordSize?
- php - 条纹结帐 PHP 集成
- vue.js - 为每个创建带有 id 的动态文本字段
- android - 从 firebase 在 RecyclerView 中显示数据:错误:无法将 java.lang.String 类型的对象转换为
- big-o - 这段代码的时间复杂度是多少,其中一个循环以几何方式增长,而另一个循环以代数方式衰减?
- java - 带有 Java 和 Selenium 的 Cucumber 错误地报告重复的步骤定义
- python - OpenCV 将数据从 C++ 传递到 Python
- swift - SKLabelNode PhysicsBody 问题
- python-3.x - list() 定义类型错误
- node.js - coinbase API 问题