红宝石环路问题
我有以下几点:红宝石环路问题
browser = Watir::Browser.start "http://www.cramster.com/solution/solution/913513"
browser.link(:xpath,".//*[@id='buttonPrint']").click
sleep 5
browser.link(:xpath,".//*[@id='cmdNext']").click
browser.link(:xpath,".//*[@id='buttonPrint']").click
是否可以创建基于此一循环,如果网页中的x秒刷新了?
网页浏览器刷新,每按下一次按钮。
除非你的问题被戴夫回答(而且非常整齐),你的意图不是很清楚。仅当页面设法在x秒内刷新时,是否要单击按钮组合?或者点击按钮,直到它在特定的秒数内刷新?所以,你可以使用...
的,直到环
IE.down_load_time:给人的时间,以秒计,它采取了新的页面加载执行的最后一个命令
后
因此,也许,只是作为一个初稿:
browser = Watir::Browser.start "http://www.cramster.com/solution/solution/913513"
browser.link(:xpath,".//*[@id='buttonPrint']").click
done = false
until done
browser.link(:xpath,".//*[@id='cmdNext']").click
done = true if browser.down_load_time <= 5
browser.link(:xpath,".//*[@id='buttonPrint']").click
sleep 5
end
的你想交流什么
更多想法hieve会有帮助,希望这对你有用。 PS。你需要使用xpath吗?
如果你正在测试,那么不要这样做。通过测试本身创建一个数据集,以便您始终知道您可以点击“下一步”的次数,而不是创建一些每次都可能表现不同的循环。即使你连续运行10000次并在一年后运行,测试也应该是可重现的。只是我的观点。
现在我有这样的:
# To change this template, choose Tools | Templates
# and open the template in the editor.
require 'rubygems'
require 'watir'
#start the browser up
Watir::Browser.default = "firefox"
browser = Watir::Browser.start "cramster.com/solution/solution/913524";
done = true
done = true if browser.link(:xpath,".//*[@id='cmdNext']").exists?
if done = true
browser.link(:xpath,".//*[@id='cmdNext']").click
browser.link(:xpath,".//*[@id='buttonPrint']").click
sleep 5
else
browser goto "cramster.com/";
end
我不认为它执行else
行动。
如果我正在阅读代码,则将done设置为true,然后将其设置为true如果您正在查找的链接存在,并且您没有任何设置为false的东西,那么总是这样做真的,因此是的,Else永远不会执行。 也许你的意思是先设置为false,然后根据现有链接进行更改,在这种情况下,您最终可能会执行其他操作。 – 2011-03-10 19:14:39
请注意,您可以[将行格式化为代码](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)缩进四个空格。编辑器工具栏中的“{}”按钮可以为您做到这一点。编辑你的答案并尝试一下。单击编辑器工具栏中的橙色问号以获取更多信息和格式化提示。 – outis 2011-03-10 19:21:09
假设您在脚本稍后的某个地方使用'done',我想您想要的更多的是这些内容。 (如果不使用完成后删除该组下面的线为true或false)
if browser.link(:id, 'Next').exists?
done = true
browser.link(:id, 'Next').click
browser.link(:id, 'Print').click
sleep 5
else
done = false
browser.goto "nextaddress.com/";
end
但是没有什么在代码等待存在的链接,你需要像戴维,鉴于代码等待它显示出来(可能会限制它循环的次数)
+1。另外,我认为在这里引入“完成”是我的错。我用它作为一个廉价的方式来跟踪我的例子中的until循环,但是如果你没有寻找循环的出口,那么done = true/false可能是没有必要的。 – kinofrost 2011-03-11 09:36:10
您是否知道Cramster的服务条款禁止使用任何类型的机器人或自动化访问他们的网站? 您能否向我们提供任何显示你有权这样做的东西? – 2011-03-16 18:12:28
@Chuck,你应该报告这个问题(也可能是这个用户提出的其他问题)点击“flag”链接 – 2011-03-18 11:01:33