无法使用Selenium Webdriver在TextBox中输入文本

时间:2019-02-06 14:43:25

标签: selenium selenium-webdriver

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

与Textbox相关的背景信息:

    当用户单击“是”单选按钮时,出现
  1. 文本框。
  2. TextBox具有默认值,因为已经输入XYZ。
  3. SendKeys也不会连接没有XYZ的文本。
  4. TextBox位于iframe中,焦点已正确移至该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 :(得分:2)

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

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

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

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

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

    (WebElement).sendKeys(“ XYZ989898-99”);

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

答案 1 :(得分:1)

您可以使用其他方法设置文本,方法是使用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");

希望对您有帮助...