我如何在文本字段输入文本与onkeyup/onfocus javascript
How do I enter text in textfield with onkeyup/onfocus javascript?
我们有一个web应用程序,我正在尝试自动化测试,使用Java, web Driver和TestNG。我面临的最大挑战(失败的)是保持在开发的前面,防止测试框架因为很小的代码更改而中断。
- 有一个接受数字的文本字段。到目前为止,
sendKeys
为我做了这项工作。 - 在最近对页面源代码的更改中,当输入数字时,会自动插入逗号。
- 所以"50000"变成了"50000"。
- 现在
sendKeys
输入值正确,但在我移出字段编辑其他字段后,值重置为0。
这是元素的来源。注意onkeyup
和onfocus
的值:
<input type="text" class="form-control tooltip-default" id="my_budget" value="" data-mask="fdecimal" data-rad="." data-toggle="tooltip" data-placement="top" data-original-title="test tooltip" onfocus="removeErrors('my_budget');" onkeyup="removeNegativeSign('my_budget');">
我以前遇到过这个问题,并尝试使用W3Schools和其他研究来破解解决方案。
方法1:键。标签
我读到sendKeys(Keys)
可以触发keyup事件,所以我试着发送Keys.TAB
driver.findElement(By.id("my_budget")).sendKeys(Keys.TAB);
这没有任何影响。
方法2:发送keyDown-keyUp
我用这个问题作为参考,只是模拟按ctrl键。
new Actions(driver).keyDown(driver.findElement(By.id("my_budget")), Keys.CONTROL).keyUp(driver.findElement(By.id("my_budget")), Keys.CONTROL).perform();
这没有任何影响。
方法3:手动执行Javascript最后,我尝试手动执行Javascript,首先为onfocus
,然后当它不起作用时,为onkeyup
。
SeleniumHelper.doJavascriptOnElement(driver, driver.findElement(By.id("my_budget")), driver.findElement(By.id("my_budget")).getAttribute("onfocus"));
SeleniumHelper.doJavascriptOnElement(driver, driver.findElement(By.id("my_budget")), driver.findElement(By.id("my_budget")).getAttribute("onkeyup"));
这会导致Javascript未找到的错误:
Caused by: java.lang.Exception: org.openqa.selenium.WebDriverException: unknown error: removeErrors is not defined
So -
- 我如何在文本域中输入文本,其中onkeyup或onfocus(或其他)Javascript是活跃的?
- 我如何编程围绕这种情况(在我身上的代码变化)在未来?是否存在我不知道的"智能"sendKeys ?
经过一天的挖掘,我找到了答案。
要使用onfocus
Javascript在文本字段中输入文本,我需要click()
文本字段web元素:
driver.findElement(By.id("my_budget")).click();
这是有效的- Javascript在输入值时执行。
为了使输入文本+生成事件更容易一些,我创建了一个方法:
调用:
sendKeysWithEvent(driver, driver.findElement(By.id("my_budget")), "50000", "onfocus");
方法:
public static void sendKeysWithEvent(WebDriver driver, WebElement element, String text, String event) throws Exception {
element.sendKeys(text);
switch(event) {
case "keyup":
new Actions(driver).keyDown(element, Keys.CONTROL).keyUp(element, Keys.CONTROL).perform();
break;
case "onblurJS":
doJavascriptOnElement(driver, element, element.getAttribute("onblur"));
break;
case "onfocus":
element.click();
break;
case "keyupJS":
doJavascriptOnElement(driver, element, element.getAttribute("onkeyup"));
break;
case "keyupTAB":
element.sendKeys(Keys.TAB);
break;
}
}
public static void doJavascriptOnElement(WebDriver driver, WebElement element, String javascript) throws Exception {
ApiHelper.doLog("Running Javascript: " + javascript);
((JavascriptExecutor) driver).executeScript(javascript, element);
}
相关文章:
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 用程序搜索JQuery数据表中的文本
- jQuery匹配JSON对象的部分文本
- onkeyup无法动态创建多个文本区域
- 在onkeyup事件中未检测到文本区域更改
- 将一个js变量传递给onkeyup输入文本
- Javascript 文本框 onkeyup 事件
- 通过onkeyup事件Jquery进行文本框验证,而不使用警报
- 文本区域中的onkeyup事件
- 在多个文本框上同时应用onkeyup函数
- 使用onkeyup事件在输入表单的文本两侧添加方括号
- 我如何在文本字段输入文本与onkeyup/onfocus javascript
- 我想在文本框旁边显示错误信息,而不是在onkeyup事件中发出警报
- Internet explorer文本输入onkeyup char 13
- Onkeyup,从文本框中获取值,更新另一个文本框,不工作
- 为什么IE11在onkeyup中设置文本框值时按Ctrl+Z会复制内容
- 从同一文本输入捕获多个onkeyup事件
- 当文本框为空时,OnKeyUp 不起作用