Невозможно ввести текст в TextBox с помощью Selenium Webdriver - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть текстовое поле, которое появляется при выборе кнопки-переключателя, и я должен ввести значения в определенном формате (XYZ989898-99).Однако я не могу сделать это с помощью широко используемых методов ввода текста в селене.

Справочная информация, связанная с текстовым полем:

  1. TextBox появляется, когда пользователь нажимает переключатель «Да».
  2. TextBox имеет значение по умолчанию, так как XYZ уже введен.
  3. SendKeys также не объединяют текст, указанный без XYZ.
  4. TextBox находится внутри Iframe, на который корректно смещается фокус.
  5. Код не терпит неудачу, он простооставался нажатым на текстовое поле, ничего не вводя.

Подход 1:

      driver.findElement(locator).SendKeys("989898-99");

Подход 2:

      driver.findElement(locator).clear();
      driver.findElement(locator).SendKeys("XYZ989898-99");

Подход 3:

      WebElement element =  driver.findElement(locator);
      Actions action1 = new Actions(driver);
      action1.movetoElement(element).click().perform();
      action1.sendKeys("XYZ989898-99");

Образец HTML:

        <div class="value" ng-show="selectedValue" style="">
            <label class="labelAboveTextBox">XYZ Number*</label>
            <input type="text" class="Value" ng-model="XYZNumber" ng- 
            req="XYZNumber" xyz-input="" maxlength="12" style="value" 
            id="value" value="XYZ" required="required">
            <!-- ngIf: invalidtspmessage -->
            <span style="font-family: 'NeueHaasGroteskText';font-size: 
            0.7rem;color: black;">
            Note: Enter XYZ is this format: XXXXXXXXX-XX
            </span>
        </div>

Я хотел бы знать, существует ли какой-либо другой подход, который может быть использован для решения этой проблемы, а также почему вышеуказанные подходы не сработали.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019
  • Вы использовали неправильные методы для отправки ключей.(в подходе 1 и 2)
  • Вместо .SendKeys () вы должны использовать метод .sendKeys () для записи чего-либо на стороне пользовательского интерфейса

  • В третьем подходе вы использовали неправильный метод .movetoElement ().Имя метода: .moveToElement ().

  • Для sendKeys () не нужно использовать класс Actions.в основном, это для событий клавиатуры и для событий мыши.

    (WebElement) .sendKeys ("989898-99");// первый подход вы можете использовать

    (WebElement) .clear ();// второй подход вы можете использовать

    (WebElement) .sendKeys ("XYZ989898-99");

Надеюсь, это поможет вам решить ваши ошибки.

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

Другой способ, которым вы можете воспользоваться, - установить текст с помощью JavaScriptExecutor.Дайте некоторую задержку перед выполнением действия.

Попробуйте следующий пример кода:

Thread.sleep(3000);
((JavascriptExecutor) driver).executeScript("document.getElementById('value').value='XYZ989898-99';");

Поскольку идентификатор уникален, вы можете использовать функцию JavaScript getElementById() для установки значения.

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

// Wait for some time
Thread.sleep(3000);
// Locate the element first and store it in some variable
WebElement element = driver.findElement(By.id("value"));
// Fetch the existing text from the field first
String existingValue = element.getAttribute("value");
// Wait for some time
Thread.sleep(3000);
// Click on that element first so the focus will shift to there
element.click();
// Wait for some time
Thread.sleep(2000);
// Loop until the existing value length
for(int i=0;i<existingValue.length();i++) {
    // Remove the existing character text one by one
    element.sendKeys(Keys.BACK_SPACE);
}
// Try to send the text at the end, make sure that you should append XYZ as a prefix
element.sendKeys("XYZ989898-99");

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...