【发布时间】:2014-07-29 10:05:47
【问题描述】:
我们有一个 Web 应用程序,我正在尝试使用 Java、Web 驱动程序和 TestNG 对其进行自动化测试。我面临(失败)的最大挑战是保持领先于开发并防止测试框架因即使是微小的代码更改而崩溃。
问题
- 有一个接受数字的文本字段。到目前为止,
sendKeys为我完成了这项工作。 - 在最近对页面源的更改中,当输入数字时,会自动插入逗号。
- 例如,“50000”变成“50,000”。
- 现在
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:Keys.TAB
I've read表示sendKeys(Keys)可以触发keyup事件,所以我尝试发送Keys.TAB
driver.findElement(By.id("my_budget")).sendKeys(Keys.TAB);
这没有任何效果。
方法二:发送keyDown-keyUp
我使用this问题作为参考,只是模拟按下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
问题
所以——
- 如何在激活了 onkeyup 或 onfocus(或其他)Javascript 的文本字段中输入文本?
- 我以后如何解决这种情况(代码在我身上发生变化)?是否有我不知道的“智能”sendKeys?
【问题讨论】:
标签: javascript selenium selenium-webdriver onkeyup onfocus