0

我有一个带有复杂数据输入表单的 Web 应用程序,其中包含一些选项卡,其中包含各种配置项的输入字段。我正在编写一个测试,在不同选项卡上的字段中输入数据,然后执行保存。当我输入每个项目时,我会在继续下一步之前验证数据输入控件是否具有我选择的文本或值。我发现有时,但并非总是如此,当我移动到另一个选项卡时,前一个选项卡上的字段会丢失我输入的数据。

我该如何防止这种情况?

我在 Java 中使用 Selenium 2 和 WebDriver 并使用 Firefox 运行测试。

我在两个领域遇到问题:

第一个是简单的文本输入字段第二个是具有自动完成功能的文本输入框

这两个字段都是我在切换选项卡之前输入数据的最后一个字段。我在切换选项卡之前输入数据的其他字段都不会丢失数据。只是我在进入新标签之前与之互动的人。

我尝试检查在将文本发送到输入字段的方法的末尾是否加载了 JQuery,但这似乎没有帮助。检查 JQuery 的方法返回 true,有时数据仍会被擦除。

手动输入数据时不会发生这种情况,并且在另一个仅在一个选项卡上输入数据的自动化测试中也不会发生这种情况。

这是输入文本并且没有触发自动完成的待处理输入时自动完成字段的 html:

<div id="s2id_autogen5" class="select2-container select2-container-multi select2">
    <ul class="select2-choices" style="">
        <li class="select2-search-choice">
            <div>
                htm
            </div>
            <a class="select2-search-choice-close" tabindex="-1" onclick="return false;" href="#"></a>
        </li>
        <li class="select2-search-field">
            <input class="select2-input" type="text" autocomplete="off" tabindex="0" style="width: 10px;"></input>
        </li>
    </ul>
</div>

这是简单文本输入字段的 html 源代码:

<td class="optionValue option_sr_test_object_url">
    <input id="option_d03e6450-5990-4a31-8e84-5b1af89d2c47_sr_test_object_url" type="text" placeholder="e.g. /path/testobject.html" value="/path/test.html">
    </input>
</td>
4

2 回答 2

0

在为此苦苦挣扎了几天之后,我对我的问题有了部分解决方案:

对于简单的文本输入框,如果我发送 Keys.TAB 将焦点更改到下一个输入字段,那么我切换到表单上的另一个选项卡时,数据通常不会被删除。当焦点切换到另一个字段(但不是另一个选项卡)时,必须触发某些事件,而当仅使用 sendKeys 输入文本时,该事件不会触发。但是,在某些情况下,数据仍然偶尔会消失。

对于具有自动完成功能的输入,我必须发送 Keys.RETURN 或 Keys.TAB 才能成功将文本输入到字段中。使用此字段,您可以从自动完成列表中选择一个选项,或者只需按 Enter 键或 Tab 键即可输入与自动完成选项之一不匹配的文本。使用 Keys.RETURN 或 Keys.TAB 输入文本后,我需要通过发送 Keys.TAB 将焦点更改为另一个字段。同样,我相信这是一些需要触发才能保留数据的事件,并且该事件仅在焦点更改到另一个输入字段后才会触发,但如果我切换选项卡则不会发生。

检查 JQuery 是否没有活动请求并没有帮助,因为在某些情况下,即使没有活动查询,数据仍然偶尔会从一个或两个字段中消失。

我需要一种真正万无一失的方法,可以在所有情况下消除此问题。我宁愿不必硬编码睡眠。也许有更好的技术以非编码方式设置良好的等待?我很想对我的问题有一个完整的解决方案,因为鉴于这个解决方案并非万无一失,我不能接受这个作为问题的答案。

于 2013-06-21T15:26:31.600 回答
0

我终于找到了可靠地阻止这种情况发生的东西:

driver.switchTo().window(driver.getWindowHandle());

当我在切换选项卡之前执行该行时,我之前输入的数据没有被清除。我不知道为什么会这样,也不记得我是如何找到这个解决方案的。几个月来,我一直想用这个答案更新这个问题,但我一直忘记这样做。

于 2014-08-07T20:15:50.703 回答