Capybara / Ruby - 当出现错误时,尝试返回循环的开头

问题描述 投票:0回答:1

当错误显示为下面的代码时,我正在尝试返回循环beginnig。

当一个偶然的错误发生时,我正在使用命令“next”,但它不会回到循环开始。

describe 'Test', :test do

before(:each) do
    visit '/admin'
end


it 'Adding new images' do

    image = 'barcelona.jpg'

    @imagem = Dir.pwd + '/spec/fixtures/' + image

    produto = '1'

    100.times do

        visit '/admin/' + produto

        if page.has_no_css?('#mensagem > h1')

                within_frame(:xpath, "//*[@id='app-content']/main/div/iframe") do

                    find('#ctl00_Conteudo_tbxNome_txtId').set 'test_name'
                    find('#ctl00_Conteudo_BtnSalvar').click

                    if page.has_no_css?('#mensagem > h1')

                        find('#ctl00_Conteudo_tbxIdArquivoControle_lnkInserirArquivo').click

                        attach_file('ctl00_Conteudo_tbxIdArquivoControle_tbxArquivo', @imagem) 
                        find('#ctl00_Conteudo_tbxIdArquivoControle_btnEnviar').click

                        if page.has_no_css?('#mensagem > h1')

                            find('#skuTabNavigation a[href="#tabImages"]').click
                            expect(page).to have_content image

                            puts 'Test ok'

                        else
                            puts 'Error was presented, starting over..'
                            next
                        end

                    else
                        puts 'Error was presented, starting over..'
                        next
                    end
                end
        else
            puts 'Error was presented, starting over..'
            next
        end
    end
end
end

我希望每当系统进入“其他”状态时,它会重新启动循环。

ruby rspec automated-tests capybara
1个回答
0
投票

我认为没有直接的方法可以回到循环的初始迭代。 redo存在,但它只会让你回到当前的迭代。

在这种情况下,您可能希望更改循环方式,以便更轻松地控制何时开始/停止。例如:

i = 0

while i <= 100 do
  if page.has_no_css?('#mensagem > h1')
    i = 0
    puts 'Error'
    next
  end

  i += 1
end

所以你不必重置循环索引并在每次救援错误时调用puts

class MyError < StandardError; end
i = 0

while i <= 100 do
  begin
    if page.has_no_css?('#mensagem > h1')
      raise MyError, 'thing was missing'
    end

    puts i
    i += 1
  rescue MyError => boom
    puts "Error: #{boom.message}"
    i = 0
    redo
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.