那么,有什么方法可以使硒正常处理这种情况?如果不是,是否可以通过某种方式从页面的javascript中检测用户是否为硒,并禁用自动刷新?
如果有帮助的话,页面中的javascript代码看起来像...
var ajax = new Ajax(url, {
update: state,
method: 'get',
onComplete: function(message) {
if (some_condition) {
window.location.replace(unescape(window.location));
}
}
});
#1 楼
在这种情况下,您可以等待Ajax请求完成。这样,即使页面已加载,您也不必担心。 ajax请求完成后,请继续。
您可以这样操作:
selenium.waitForCondition(
"selenium.browserbot.getCurrentWindow().jQuery.active == 0",
timeout);
其中超时是可选的整数参数。
#2 楼
如果Hannibal的答案不起作用,那么对于加载时间很长的页面来说,对我有用的是在导致页面刷新的操作之后立即添加调用方法,或者在下一个操作开始时添加,检查是否确实存在将始终存在于页面上的特定元素。#3 楼
简单的解决方案是让selenium执行脚本以覆盖/禁用自我刷新的javascript。selenium rc是selenium 1,但是无论如何,可以同时使用两个驱动程序来执行javascript。
除此之外,@ Hannibal还有一个很好的解决方案,我很可能会自己这样做
评论
在您发布此内容时正在写答案。我认为我将以自己的自动化方式来实现您的解决方案,因为这似乎效率更高。
– Lyndon Vrooman
2011年5月6日,11:12
只是等待ajax请求和onComplete处理程序完成,还是等到新页面(由window.location.replace加载)被完全加载?
–马特·谢泼德(Matt Sheppard)
2011年5月6日,11:12
@Lyndon:谢谢你。 :) @Matt:这实际上等待每个jQuery请求完成。它会一直等到jQuery在您页面上所做的一切都完成后,甚至持续一微秒。如果jQuery进入状态:active = 0,则您的程序将继续。当然,这仅对jQuery有效,但是您可以对其进行编辑以表示所使用的任何工具。顺便说一句,如果您不使用jQuery,则应该感到羞耻。 :D
–汉尼拔
2011年5月6日,11:26
谢谢-我会尝试的。我仍然不确定它是否会工作,因为我已经假设,当window.location.replace开始加载新页面时,旧的jquery上下文将需要被销毁。假设发生这种情况,除非正在加载的新页面将jquery用于某件事,否则jquery实际上不会再次变为活动状态,即使那样,在页面加载过程中也会有一些不活动的地方。就是说,我不确定,所以我将对其进行测试,看看您是否正确,jQuery.active可以通过页面加载而存活。
–马特·谢泼德(Matt Sheppard)
11年5月8日在11:18
是的,我希望对您有所帮助。毕竟这只是一个主意。我真的希望至少能帮助您到那里。
–汉尼拔
2011年5月9日7:08