【问题标题】:Not able to Enter Text in a TextBox using Selenium Webdriver无法使用 Selenium Webdriver 在文本框中输入文本
【发布时间】:2019-02-07 16:53:28
【问题描述】:

我有一个出现在单选按钮选择上的文本框,我必须以特定格式 (XYZ989898-99) 输入值。但是我无法通过使用在 selenium 中输入文本的常用方法来做到这一点。

与文本框相关的背景信息:

  1. 当用户单击“是”单选按钮时出现文本框。
  2. TextBox 具有默认值,因为 XYZ 已输入。
  3. SendKeys 也不会连接没有 XYZ 的文本。
  4. TextBox 位于焦点正确转移到的 Iframe 内。
  5. 代码没有失败,它只是一直点击文本框而没有输入任何内容。

方法一:

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

方法二:

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

方法三:

      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>

我想知道是否有任何其他方法可以用来解决这个问题,以及为什么上述方法不起作用。

【问题讨论】:

  • 你能在这里分享html吗?
  • 嘿@KajalKundu 在此处分享了 HTML 示例。 iframe 切换非常好,代码也可以单击/清除文本框。
  • 你使用什么语言?
  • @kovid mehta,你能分享一下你用来发送文本的定位器吗?
  • 嘿 @MosheSlavin 我在这里使用 Java 作为语言。

标签: selenium selenium-webdriver


【解决方案1】:
  • 您使用了错误的方法来发送密钥。 (在方法 1 和 2 中)
  • 您必须使用 .sendKeys() 方法代替 .SendKeys() 在 UI 端编写任何内容

  • 在第三种方法中,您使用了错误的方法 .movetoElement()。方法名称是 .moveToElement()。

  • 对于 sendKeys() 不需要使用 Actions 类。基本上,它用于键盘事件和鼠标事件。

    (WebElement).sendKeys("989898-99"); // 你可以使用的第一种方法

    (WebElement).clear(); // 您可以使用的第二种方法

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

希望这将帮助您解决错误。

【讨论】:

  • 对不起 Yash 但这不是解决方案。我刚刚提到了这些代码行的方法,如果方法名称拼写错误,Eclipse 会注意纠正方法名称。因此,当我确认上述方法中没有语法错误时,您可以忽略这种情况。
【解决方案2】:

您可以使用的其他方法是使用 JavaScriptExecutor 设置文本。在执行操作之前延迟一些时间。

试试下面的示例代码:

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

由于id是唯一的,可以使用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");

希望对你有帮助……

【讨论】:

  • 嘿 Ali,谢谢我昨天尝试了 Javascript 方法,它成功了。我也会尝试 Keys.BACK_SPACE 并更新线程。但总结一下您提供的解决方案是有效的。
猜你喜欢
  • 2016-12-11
  • 2016-06-20
  • 2013-05-05
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多