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

Posted

技术标签:

【中文标题】使用 .sendKeys() 方法部分插入字符串【英文标题】:Partially inserted String with .sendKeys() method 【发布时间】:2019-08-13 09:11:53 【问题描述】:

我有一个模态窗口,里面有一些文本框。我曾经使用 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() 返回 null

希望有人能给这里带来一些光明。

提前致谢

【问题讨论】:

我们可以看到您正在测试的页面的 HTML 吗? 当然。你去。谢谢 我想说这一定是驱动程序或硒方面的东西。输入的验证规则是什么,它的工作速度是否可能足够慢以引入片状?如果您删除验证,它会正常工作吗?您是否尝试过使用 selenium Waits 而不是使用 sleep() 锁定线程? Selenium - send_keys() sending incomplete string的可能重复 【参考方案1】:

你现在使用的线路,

String xpectedString = nameField.getText();

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

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

【讨论】:

这是正确的。更多信息***.com/a/7854392/5360885【参考方案2】:

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

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

【讨论】:

以上是关于使用 .sendKeys() 方法部分插入字符串的主要内容,如果未能解决你的问题,请参考以下文章

sendkeys用法详解

无法使用 (SendKeys.Send) 粘贴字符串

如何在Selenium中使用sendKeys()方法传递一个arraylist

java+selenium+new——使用sendKeys方法,上传一个附件

C# 模拟键盘操作SendKey(),SendKeys() / C# SendKeys用法

selenium在使用sendkeys()时报错