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

时间:2019-03-22 11:29:10

标签: java selenium-webdriver gherkin

我有一个模态窗口,其中有一些文本框。我曾经使用className输入文本以获取所有表单字段并为文本框建立索引。如今,模式已发生变化,开发人员为我提供了每个盒子的ID。我正在尝试执行的操作只是输入文本并单击“提交”按钮,但是发生的情况是有时有时会部分插入字符串。

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

我试图通过ID,XPATH定位元素... 但要点是,我可以看到文本在字段中的位置,以便元素可以正确定位

还有另一个问题。为了确保文本框在.senKeys()方法之后包含什么,我放置并断言应该通过.getText()方法从文本框中获取文本,并将其与我传递给main方法的字符串进行比较,但是我在这一点上变得空了,我可以看到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>

因此,正如我在上文所述,在正确插入字符串之前,代码将用于“提交”按钮(在下一个方法中)。调试时,我可以检查字符串是否正确,然后是第二个问题。我尝试在方法中再次查找具有另一个名称的相同元素,但结果相同,.getText()返回空值

希望有人可以在这里带来一些启发。

预先感谢

2 个答案:

答案 0 :(得分:1)

您现在正在使用的行,

String xpectedString = nameField.getText();

将返回该输入元素的innerHTML。我不确定在该输入字段中键入的文本是否在innerHTML中,可能在“值”属性中。因此,尝试将其定义为

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

答案 1 :(得分:-1)

我以前见过。我认为这是由于页面加载问题引起的……就像页面加载到某个点,然后完成加载导致根据时间的变化导致文本截断一样。您可能会做两件事。

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