部分插入带有.sendKeys()方法的String

问题描述 投票:3回答:2

我有一个模态窗口,里面有一些文本框。我曾经使用className输入文本来获取所有表单字段并索引文本框。如今,模态已经改变,dev为我提供了每个盒子的ID。我正在尝试做的只是输入文本并单击“提交”按钮,但会发生的情况是,有时会将String部分插入。

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

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

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

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

希望有人能在这里带点光明。

提前致谢

java selenium-webdriver gherkin
2个回答
1
投票

你现在使用的那条线,

String xpectedString = nameField.getText();

将返回该输入元素的innerHTML。我不确定键入该输入字段的文本是否在innerHTML中,可能在'value'属性中。所以尝试将其定义为

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

-1
投票

我以前见过这个。我认为这是由于页面加载问题...就像页面加载到一个点然后完成加载导致文本的切断取决于事情的时间。你可以做一些事情。

  1. 你可以看看INPUT是否陈旧。如果是,请等待陈旧,然后输入文本。
  2. 另一个选择是将.sendKeys()和验证放在循环中并删除断言。循环说最多3次,每次重新输入文本直到成功。如果达到最大尝试次数,则测试失败。
© www.soinside.com 2019 - 2024. All rights reserved.