答案 0 :(得分: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
答案 1 :(得分:1)
首先,这里有一些有趣的等待方法:How do I use Watir::Waiter::wait_until to force Chrome to wait?
总的来说,我不太明白你的问题。据我所知,你的脚本正在运行。如果您对自己的愿望有所了解,那么与您已经拥有的内容相比,这将有所帮助,就像一些示例源代码一样。
如果您正在寻找自定义等待的想法,可以检查页面,表单或文本字段的HTML中的更改。您可以检查文本字段是否为.visible?。您可以尝试访问下一个text_field(单击它,或者设置值,例如),然后捕获异常,如果它找不到text_field并重试,直到它没有中断,这将立即解决您的问题。 / p>
为什么在当前字段外点击是一个糟糕的解决方案?你绝对需要下一步才能成为text_field访问吗?当你在当前字段外单击时,我还没有理解下一个字段是如何存在的,但是你通过访问下一个字段来进行刷新。
编辑:非常欢迎,谢谢你清理它,我想我现在明白了。如果您允许Watir调用其页面等待或强制它,则它将等待刷新,然后您可以找到新的text_field。击键不会调用ie.wait,所以如果你发送一个击键,然后调用一个等待,那么你的脚本的其余部分将响应后刷新状态。
我强烈推荐OpenQA page on waiting in Watir。如果您调用刷新的内容没有出现在调用Watir页面的事物列表中,那么您需要调用自己的页面等待...但是您需要在页面刷新之前执行此操作,因此需要刷新应该在刷新本身结束之前结束。
答案 2 :(得分:1)
我不知道peoplesoft的应用程序是否足以知道这一点,但应用程序在处理时是否会为用户显示任何内容...就像某种小的“加载”图形或任何您可以关键的内容告诉它何时完成?
我见过这样做的应用程序,这个项目只是一个动画gif或png,它通过改变包含图形的div的visibility属性来显示。在那种情况下,您可以通过使用.visible来判断应用程序是否仍在加载?关于那个元素的方法,如果它还在那里就睡了一会儿。
对于我正在测试的应用程序(其中有一个'图标')我创建了一个名为sleepwhileloading的简单方法。所有这一切都是使用一个while循环包裹的一秒钟睡眠,看看加载图标是否可见。像魅力一样工作