Невозможно очистить текстовую область, которая автоматически вводит текст при очистке и размытии с помощью Selenium WebDriver - PullRequest
0 голосов
/ 05 февраля 2019

Я использую Selenium WebDriver с использованием Java.У меня есть текстовое поле, и я хотел бы очистить содержимое по умолчанию и ввести в него новый контент.Функциональность такова, что если я удаляю текст из textarea и нажимаю кнопку Tab, текст по умолчанию будет заполняться автоматически.Ниже приведен HTML-код текстовой области:

<textarea autocomplete="off" class="form-control rd-control rd-control--textarea empty" cols="20" data-bind="value: offerTitle, expandedTextArea: offerTitle, valueUpdate: 'afterkeydown', customerRequiredFieldsBinding" id="CheckoutWelcomeTitle" name="CheckoutWelcomeTitle" placeholder="ex. Here comes the best offer" rows="1" type="text" data-autosize-on="true" style="overflow-y: hidden; height: 35.9792px;" onblur="setTextColorDefault(this)" oninput="setTextColor(this)">Let's bid on a discount code!</textarea>

Я попытался использовать:

driver.findElement(By.id("CheckoutWelcomeTitle")).clear

Но это не сработало.Я также попробовал это:

driver.findElement(By.id("CheckoutWelcomeTitle")).sendKeys(Keys.CONTROL + "a") 
driver.findElement(By.id("CheckoutWelcomeTitle")).sendKeys(Keys.DELETE)

Это работает иногда, но не всегда.Иногда он очищает данные и пополняет текст по умолчанию.

Есть ли другой способ очистки этого текстового поля таким образом, чтобы он работал каждый раз?

В случае, если это поможет, разработчики использовалиJavaScript для повторного заполнения текстового поля при размытии.

Редактировать: Я использовал явное ожидание с условием, чтобы элемент был активным.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Требуемый элемент является динамическим элементом, поэтому для нахождения элемента необходимо вызвать WebDriverWait , чтобы элемент был активным , и вы можете использовать любой из следующих ЛокаторовСтратегии :

  • cssSelector:

    WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("textarea.form-control.rd-control.rd-control--textarea.empty#CheckoutWelcomeTitle")));
    myElement.click();
    myElement.clear();
    
  • xpath:

    WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//textarea[@class='form-control rd-control rd-control--textarea empty' and @id='CheckoutWelcomeTitle']")));
    myElement.click();
    myElement.clear();
    
0 голосов
/ 05 февраля 2019

Используйте Java Script executor, он должен работать.

JavascriptExecutor executor = (JavascriptExecutor) driver;

executor.executeScript("document.getElementById('CheckoutWelcomeTitle').value=''");
...