1

我正在使用 Watir 1.6.7。

我正在使用 Watir 和 Cucumber 为 PeopleSoft 应用程序开发一些回归测试。我在应用程序中遇到了一些表单问题。

首先,在 text_field 中输入值时,当用户在 text_field 之外单击时,页面会刷新。等待下一个 text_field 元素存在是有问题的,因为它可能会在页面重新加载之前或在页面重新加载后按预期定位元素。增加等待时间从来都不是一个好的解决方案,即使它“有效”。

第二个问题是直到用户在当前字段之外点击才会触发页面刷新。在这种情况下,当脚本尝试访问下一个要填充的 text_field 时会发生这种情况。这里的一个解决方案是发送一个或键击,但我能感觉到脚本随着每次这样的添加而变得更加脆弱。

是否有任何其他方法不那么脆弱,并且在每个 text_field 操作之间不需要 2-3 个额外的命令?

逐个播放看起来像:

  • 浏览器导航到包含表单的页面。
  • 浏览器填写第一个表单字段。(修复:发送击键导致页面刷新,wait_until 第二个字段再次可见)
  • 浏览器选择要填写的第二个表单域。(再次,击键和 wait_until)
  • 页面刷新,脚本失败。(解决)
  • 浏览器选择第三个表单域...
4

3 回答 3

2

应用程序开始超过 5 秒的睡眠持续时间,我不想再增加等待时间。我想看看如果我使用“element.value =”而不是使用“element.set”逐个字符更快地填充文本字段会发生什么。

这一变化彻底解决了所有复杂问题。输入文本时页面不再刷新,并且不再需要 send_keys 语句来使用 TAB 或 ENTER 移动到另一个字段。即使字段之间没有刷新或状态保存,表单也会存储所有输入的数据。

以前的方法:

def enter_text(element, text)
    element.set text
    @browser.send_keys("+{TAB}")
    sleep 5
    Watir:Wait.until { element.exists? }
end

新方法:

def enter_text(element, text)
    element.value = text
end
于 2011-03-01T15:59:39.697 回答
1

首先,这里有一些有趣的等待方法:How do I use Watir::Waiter::wait_until to force Chrome to wait?

总的来说,我不太明白你的问题。据我了解,您的脚本正在运行。如果与已有的相比,您可以更清楚地了解自己的愿望,那么一些示例源代码也会有所帮助。

如果您正在寻找有关自定义等待的想法,您可以检查页面、表单或文本字段的 HTML 中的更改。您可以检查文本字段是否为 .visible?。您可以尝试访问下一个 text_field(例如单击它,或设置值),然后在找不到 text_field 时捕获异常并重试,直到它没有中断,这将同时解决您的两个问题。

为什么在当前字段之外单击是一个不好的解决方案?您是否绝对需要下一步才能成为 text_field 访问权限?我还没有弄清楚下一个字段是如何仅在您在当前字段之外单击时才存在的,但是您通过访问下一个字段来导致此刷新。

编辑:非常欢迎,感谢您澄清这一点,我想我现在理解得更好了。如果你允许 Watir 调用它的页面等待,或者强制它,那么它将等待刷新,然后你可以找到新的 text_field。击键不会调用 ie.wait,因此如果您发送单个击键,然后调用等待,那么脚本的其余部分将响应刷新后状态。

我强烈推荐在 Watir 等待的 OpenQA 页面。如果您为调用刷新所做的操作未出现在调用 Watir 页面等待的事物列表中,那么您需要调用您自己的页面等待......但您需要在页面刷新之前执行此操作,因此刷新应该在刷新本身结束之前结束。

于 2011-02-09T11:43:46.793 回答
1

我不太了解peoplesoft的应用程序,无法知道这一点,但是该应用程序在处理过程中是否会为用户显示任何内容......比如某种小的“加载”图形或任何你可以关闭以判断何时完成?

我见过这样做的应用程序,该项目只是一个动画 gif 或 png,它通过更改包含图形的 div 的可见性属性来显示。在这种情况下,您可以使用 .visible? 来判断应用程序是否仍在加载。该元素上的方法并休眠一段时间,如果它仍然存在。

对于我正在测试的应用程序(其中有一个“图标”),我创建了一个简单的方法,称为 sleepwhileloading。它所做的只是使用一个包裹在 while 循环中的一秒钟睡眠,以查看加载图标是否可见。奇迹般有效

于 2011-02-25T05:14:53.330 回答