单击 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")));