Java 使用.sendKeys()方法部分插入字符串

Java 使用.sendKeys()方法部分插入字符串,java,selenium-webdriver,gherkin,Java,Selenium Webdriver,Gherkin,我有一个模态窗口,里面有一些文本框。我曾经使用className输入文本,以获取所有表单字段并为文本框编制索引。现在,模式已经改变,dev为每个盒子提供了一个ID。我试图做的只是输入文本并单击提交按钮,但有时会出现部分插入字符串的情况 假设我想输入“System1”字符串,但有时WebDriver会输入“Sys”或“Sy”等。。然后点击 我试图通过ID、XPATH来定位元素但关键是我可以看到文本是如何在字段上的,这样元素就可以正确定位了 还有另一个问题。为了确定textbox在.senKeys(

我有一个模态窗口,里面有一些文本框。我曾经使用className输入文本,以获取所有表单字段并为文本框编制索引。现在,模式已经改变,dev为每个盒子提供了一个ID。我试图做的只是输入文本并单击提交按钮,但有时会出现部分插入字符串的情况

假设我想输入“System1”字符串,但有时WebDriver会输入“Sys”或“Sy”等。。然后点击

我试图通过ID、XPATH来定位元素但关键是我可以看到文本是如何在字段上的,这样元素就可以正确定位了

还有另一个问题。为了确定textbox在.senKeys()方法之后包含了什么,我放置并断言wich应该通过.getText()方法从textbox获取文本,并将其与传递给main方法的字符串进行比较,但此时我得到了null,我可以看到WebDrivers在功能上是如何输入内容的,完整与否 请注意,我对.sendKeys()和.getText()方法使用相同的WebElement对象

下面是我正在运行的代码,简单AF:

//Locating the TextBox
@FindBy(how = How.ID, using = "text")
public WebElement nameField;


public void introducirEnCampoNombre(String name) {
   //nameField.clear();
    nameField.sendKeys(name);

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    String xpectedString = nameField.getText();
    Assert.assertEquals(name, xpectedString);
}
以下是相关的HTML代码:

<form id="systemForm" action="/ik-conf/systemAction/save" method="POST">
            <input id="id" name="id" type="hidden" value="">
            <input id="parentNode.id" name="parentNode.id" type="hidden" value="1">

            <div class="row">
                <div class="left lv-text-label">
                    <label for="text" class="right-label inline">Nombre(*):</label>
                </div>
                <div class="right lv-text-input">
                    <input id="text" name="text" autofocus="autofocus" validation="/ik-conf/system/nameValidation" class="ikconf-fieldset width_100x100" type="text" value="">
                </div>
            </div>
            <div class="row">
                    <div class="left">
                        <label for="description" class="right-label inline">Descripción:</label>
                    </div>
                    <div class="right">
                        <textarea id="description" name="description" style="margin-bottom:0px;" class="width_100x100 z-label" rows="3" cols="40"></textarea>
                    </div>
                </div>

名称(*):
描述:
正如我上面所说的,在正确插入字符串之前,代码用于submit按钮(在下一个方法中)。调试时,我可以检查字符串是否正确,然后是第二个问题。我试图在方法中再次找到具有另一个名称的相同元素,但结果相同,.getText()返回null

希望有人能带点光过来


提前感谢您现在使用的线路

String xpectedString = nameField.getText();
将返回该输入元素的innerHTML。我不确定输入字段中键入的文本是否在innerHTML中,可能在“value”属性中。所以试着把它定义为

String xpectedString = nameField.getAttribute(“value”);

我以前见过这个。我想这是因为页面加载问题。。。就像页面加载到一个点,然后完成加载,根据时间的不同导致文本被截断。你可能会做一些事情

  • 您可以查看
    输入是否过时。如果是,请等待stale,然后输入文本
  • 另一个选项是将
    .sendKeys()
    和验证放在一个循环中,并删除断言。循环最多3次,每次重新输入文本直到成功。如果达到最大尝试次数,则测试失败

  • 我们可以看到您正在测试的页面的HTML吗?当然可以。好了。谢谢,我想说这一定是司机或硒这边的东西。输入的验证规则是什么?是否可能工作速度慢到足以引入片状?如果删除验证,它会正常工作吗?您是否尝试过使用selenium Waits而不是使用
    sleep()
    锁定线程?这可能是正确的。更多信息请访问