【发布时间】:2011-09-15 04:47:09
【问题描述】:
我有一个机械化功能可以让我退出网站,但在极少数情况下它会让我超时。该功能涉及转到特定页面,然后单击注销按钮。有时,当进入注销页面或单击注销按钮时,机械化会超时,代码会崩溃。因此,我进行了一次小型救援,它似乎正在工作,如下面的第一段代码所示。
def logmeout(agent)
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
end
带救援的 Logmeout:
def logmeout(agent)
begin
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
rescue Timeout::Error
puts "Timeout!"
retry
end
end
假设我正确理解了救援,即使只是单击超时,它也会执行这两个操作,所以为了提高效率,我想知道我是否可以在这种情况下使用 proc 并将代码块传递给它。会不会有这样的工作:
def trythreetimes
tries = 0
begin
yield
rescue
tries += 1
puts "Trying again!"
retry if tries <= 3
end
end
def logmeout(agent)
trythreetimes {page = agent.get('http://www.example.com/')}
trythreetimes {agent.click(page.link_with(:text => /Log Out/i))}
end
请注意,在我的 trythreetimes 函数中,我将其保留为通用救援,因此该函数将更具可重用性。
非常感谢任何人提供的任何帮助,我意识到这里有几个不同的问题,但它们都是我正在努力学习的东西!
【问题讨论】: