У меня есть функция механизации, чтобы выйти из сайта, но в очень редких случаях это делает меня тайм-аутом. Функция включает в себя переход на определенную страницу, а затем нажмите кнопку выхода из системы. Иногда, когда механизация страдает от тайм-аута, либо при переходе на страницу выхода из системы, либо при нажатии кнопки выхода из системы происходит сбой кода. Поэтому я добавил небольшое спасение, и оно работает, как видно из первого фрагмента кода.
def logmeout(agent)
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
end
Выход из системы со спасением:
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
Предполагая, что я правильно понимаю спасение, оно выполнит оба действия, даже если просто щелкнет тайм-аут, поэтому в стремлении быть эффективным, мне было интересно, смогу ли я использовать прок в этой ситуации и передать ему блок кода. Будет ли что-то вроде этой работы:
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 я оставил ее как общее спасение, чтобы эта функция была более пригодной для повторного использования.
Большое спасибо за любую помощь, которую кто-либо может оказать, я понимаю, что здесь есть пара разных вопросов, но это все, чему я пытаюсь научиться!