2011-03-08 191 views
-1

我有以下几点:红宝石环路问题

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秒刷新了?

网页浏览器刷新,每按下一次按钮。

+0

您是否知道Cramster的服务条款禁止使用任何类型的机器人或自动化访问他们的网站? 您能否向我们提供任何显示你有权这样做的东西? – 2011-03-16 18:12:28

+0

@Chuck,你应该报告这个问题(也可能是这个用户提出的其他问题)点击“flag”链接 – 2011-03-18 11:01:33

回答

1

除非你的问题被戴夫回答(而且非常整齐),你的意图不是很清楚。仅当页面设法在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吗?

0

如果你正在测试,那么不要这样做。通过测试本身创建一个数据集,以便您始终知道您可以点击“下一步”的次数,而不是创建一些每次都可能表现不同的循环。即使你连续运行10000次并在一年后运行,测试也应该是可重现的。只是我的观点。

0

现在我有这样的:

# 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行动。

+0

如果我正在阅读代码,则将done设置为true,然后将其设置为true如果您正在查找的链接存在,并且您没有任何设置为false的东西,那么总是这样做真的,因此是的,Else永远不会执行。 也许你的意思是先设置为false,然后根据现有链接进行更改,在这种情况下,您最终可能会执行其他操作。 – 2011-03-10 19:14:39

+0

请注意,您可以[将行格式化为代码](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)缩进四个空格。编辑器工具栏中的“{}”按钮可以为您做到这一点。编辑你的答案并尝试一下。单击编辑器工具栏中的橙色问号以获取更多信息和格式化提示。 – outis 2011-03-10 19:21:09

0

假设您在脚本稍后的某个地方使用'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 

但是没有什么在代码等待存在的链接,你需要像戴维,鉴于代码等待它显示出来(可能会限制它循环的次数)

+0

+1。另外,我认为在这里引入“完成”是我的错。我用它作为一个廉价的方式来跟踪我的例子中的until循环,但是如果你没有寻找循环的出口,那么done = true/false可能是没有必要的。 – kinofrost 2011-03-11 09:36:10