我们有一个Web应用程序,我正在尝试使用Java,Web Driver和TestNG对其进行自动化测试。我面临的最大挑战(失败)是保持开发领先地位,并防止测试框架即使进行很小的代码更改就不会破坏。
问题
sendKeys
这是元素的来源。注意值onkeyup和onfocus:
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
我读过这sendKeys(Keys)可以触发keyup事件,所以我尝试发送Keys.TAB
sendKeys(Keys)
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
题
所以-
经过一天的挖掘,我找到了答案。
要使用onfocusJavascript 在文本字段中输入文本,我需要click()使用文本字段webelement:
click()
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); }