我正在尝试使用Java,Web Driver和TestNG自动化测试的Web应用程序。我面临的最大挑战(失败)是保持领先于开发并防止测试框架因代码更改而中断。
问题
sendKeys
为我做了这份工作。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)
可以触发关键字事件,因此我尝试发送Keys.TAB
driver.findElement(By.id("my_budget")).sendKeys(Keys.TAB);
这没有任何效果。
方法2:发送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
问题
所以 -
答案 0 :(得分:3)
经过一天的挖掘后,我找到了答案。
要使用onfocus
Javascript在文本字段中输入文字,我需要click()
文字字段webelement:
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);
}