单击 Web 应用程序中的另一个元素后删除输入的值
Entered values removed after clicks on another element in the web application
我有一个输入字段,我们需要在其中输入一些值,但随后该输入字段将更新为货币值,但是当我在单击另一个元素后自动将该填充值设置为空一次时。我该如何解决?
我已附上我的申请截图:
下面是我正在使用的代码:
jse.executeScript("document.getElementById('Amount1').setAttribute('value', '20')");
即使我尝试使用 TAB 键事件,但仍然存在相同的行为。
尝试使用以下函数触发 onchange
或相关事件。
public static void jsTriggerEventOnElement(WebDriver driver, WebElement element, String eventName) {
String jsFunction = " var genericEvent = document.createEvent ('Event'); clickEvent.initEvent ('" + eventName + "', true, true); arguments [0].dispatchEvent (genericEvent); ";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(jsFunction, element);
}
您可以在字段中输入值后使用以下代码行触发事件。
// enter the value using the normal send_keys/js
// now call the jsTriggerEventOnElement method, here we are triggering the onchange event
// please change the event based the associated event
jsTriggerEventOnElement(driver, element, 'onchange`)
请参阅此 ,它将提供查找相关事件的思路。但是,您始终可以尝试使用 onchange
作为第一次检查。
编辑
试试下面的方法。
public static void jsTriggerEventOnElement(WebDriver driver, WebElement element, String eventName) {
String jsFunction = " var clickEvent = document.createEvent ('Event'); clickEvent.initEvent ('" + eventName + "', true, true); arguments [0].dispatchEvent (clickEvent); ";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(jsFunction, element);
}
jsTriggerEventOnElement(driver,element, 'onblur');
我终于找到了这个问题的答案。
一个主要原因是元素在输入值后曾经过时,所以我不得不再次重新初始化它们。(但我认为这不是最佳编码实践)
javascriptHelper.enterTextToField(amount2, driver.findElement(“id of the amount field”));
javascriptHelper.clickOnElement(WebElementExtension.WaitForElementId(driver, "id of the amount field",
driverWaitHelper.waitingTime()));
WebElement textEleAmount2 = driver.findElement(By.id("id of the amount field"));
textEleAmount2.sendKeys(Keys.TAB);
javascriptHelper.clickOnElement(WebElementExtension.WaitForElementId(driver, "id of the name field",
driverWaitHelper.waitingTime()));
//Here I’m initialising the element again due to stale element reference
WebElement amountContractor2 = WebElementExtension.WaitForElementId(driver, "id of the amount field",
driverWaitHelper.waitingTime());
// erase any existing value in the amount field
for (int i = 0; i < amountContractor2.getAttribute("data-value").length(); i++) {
amountContractor2.sendKeys(Keys.BACK_SPACE);
}
amountContractor2.sendKeys("300");
javascriptHelper.jsTriggerEventOnElement(driver, amountContractor2, "change");
// click away to fire on change event
javascriptHelper.clickOnElement(driver.findElement(By.id("id of the name field")));
我有一个输入字段,我们需要在其中输入一些值,但随后该输入字段将更新为货币值,但是当我在单击另一个元素后自动将该填充值设置为空一次时。我该如何解决?
我已附上我的申请截图:
下面是我正在使用的代码:
jse.executeScript("document.getElementById('Amount1').setAttribute('value', '20')");
即使我尝试使用 TAB 键事件,但仍然存在相同的行为。
尝试使用以下函数触发 onchange
或相关事件。
public static void jsTriggerEventOnElement(WebDriver driver, WebElement element, String eventName) {
String jsFunction = " var genericEvent = document.createEvent ('Event'); clickEvent.initEvent ('" + eventName + "', true, true); arguments [0].dispatchEvent (genericEvent); ";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(jsFunction, element);
}
您可以在字段中输入值后使用以下代码行触发事件。
// enter the value using the normal send_keys/js
// now call the jsTriggerEventOnElement method, here we are triggering the onchange event
// please change the event based the associated event
jsTriggerEventOnElement(driver, element, 'onchange`)
请参阅此 onchange
作为第一次检查。
编辑
试试下面的方法。
public static void jsTriggerEventOnElement(WebDriver driver, WebElement element, String eventName) {
String jsFunction = " var clickEvent = document.createEvent ('Event'); clickEvent.initEvent ('" + eventName + "', true, true); arguments [0].dispatchEvent (clickEvent); ";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(jsFunction, element);
}
jsTriggerEventOnElement(driver,element, 'onblur');
我终于找到了这个问题的答案。 一个主要原因是元素在输入值后曾经过时,所以我不得不再次重新初始化它们。(但我认为这不是最佳编码实践)
javascriptHelper.enterTextToField(amount2, driver.findElement(“id of the amount field”));
javascriptHelper.clickOnElement(WebElementExtension.WaitForElementId(driver, "id of the amount field",
driverWaitHelper.waitingTime()));
WebElement textEleAmount2 = driver.findElement(By.id("id of the amount field"));
textEleAmount2.sendKeys(Keys.TAB);
javascriptHelper.clickOnElement(WebElementExtension.WaitForElementId(driver, "id of the name field",
driverWaitHelper.waitingTime()));
//Here I’m initialising the element again due to stale element reference
WebElement amountContractor2 = WebElementExtension.WaitForElementId(driver, "id of the amount field",
driverWaitHelper.waitingTime());
// erase any existing value in the amount field
for (int i = 0; i < amountContractor2.getAttribute("data-value").length(); i++) {
amountContractor2.sendKeys(Keys.BACK_SPACE);
}
amountContractor2.sendKeys("300");
javascriptHelper.jsTriggerEventOnElement(driver, amountContractor2, "change");
// click away to fire on change event
javascriptHelper.clickOnElement(driver.findElement(By.id("id of the name field")));