我们有一个 Web 应用程序,我正在尝试使用 Java、Web Driver 和 TestNG 对其进行自动化测试。我面临的最大挑战(失败)是保持领先开发并防止测试框架因哪怕是很小的代码更改而中断。
Problem
- 有一个接受数字的文本字段。至目前为止,
sendKeys
为我做了这项工作。
- 在最近对页面源的更改中,输入数字时,会自动插入逗号。
- 例如,“50000”变为“50,000”。
- Now
sendKeys
正确输入值,但在我移出该字段并编辑其他字段后,该值重置为 0。
这是该元素的来源。请注意以下值onkeyup
and 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');">
我以前遇到过这个问题,并尝试使用以下方法破解解决方案W3学校和其他研究。
方法一:Keys.TAB
我读了 that sendKeys(Keys)
可以触发 keyup 事件,所以我尝试发送Keys.TAB
driver.findElement(By.id("my_budget")).sendKeys(Keys.TAB);
这没有任何效果。
方法2:发送keyDown-keyUp
I used 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
Question
So -
- 如何在 onkeyup 或 onfocus(或其他)Javascript 处于活动状态的文本字段中输入文本?
- 将来我该如何针对这种情况(代码在我身上发生变化)进行编程?是否有一个我不知道的“智能”sendKeys?