Как очистить текст в текстовом поле? - PullRequest
0 голосов
/ 24 декабря 2018

webdriver clear () не очищает существующий текст

Я пробовал clear(), и он не работает, поэтому пробовал .sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.BACK_SPACE)), но мой старший не хочет, чтобы я использовал ключи.Так что не знаете, как я могу очистить текст?

HTML элемента:

<input name="Quantity_110787" type="number" min="0" ng-model="invoiceLine.quantity" class="form-control ng-pristine ng-valid ng-not-empty ng-valid-min ng-touched" ng-keypress="$ctrl.preventKey($event)" aria-invalid="false">

Испытания кода:

public void sendText(String text) {
        for (String control : controls) { 
        if(getWebDriver().findElement(By.cssSelector(control)).getAttribute("type").contains("number")) {
                getWebDriver().findElement(By.cssSelector(control)).sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.BACK_SPACE), text);
                break;
            }
        }

Я хочу, чтобы текстовое поле было очищено,так что я могу ввести новый текст.Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Это должно работать, как сказал @Dark Knight,

driver.findElement("locator").clear();

попытаться щелкнуть до

 driver.findElement("locator").click();
 driver.findElement("locator").clear();

иначе попробовать использовать sendKeys

driver.findElement("locator").click();
driver.findElement("locator").sendKeys("");

еще попробовать JS:

WebElement wb = driver.findElement("locator");
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].value='';", wb);

Спасибо,

0 голосов
/ 27 декабря 2018

Требуемый элемент - это Угловой элемент, поэтому для вызова метода clear() вам нужно вызвать WebDriverwait , чтобы элемент был кликабельным , и вы можете использоватьодно из следующих решений:

  • cssSelector:

    WebElement elem = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.form-control.ng-pristine.ng-valid.ng-not-empty.ng-valid-min.ng-touched[type='number'][name^='Quantity_']")));
    elem.click();
    elem.clear();
    
  • xpath:

    WebElement elem = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='form-control ng-pristine ng-valid ng-not-empty ng-valid-min ng-touched' and @type='number'][starts-with(@name, 'Quantity_')]")));
    elem.click();
    elem.clear();
    
0 голосов
/ 24 декабря 2018

Попробуйте сделать это следующим образом.

driver.findElement("locator").clear();
...