Problemas ao fazer login [Docker + Capybara + Selenium]

Topic created · 4 Posts · 70 Visualizações
  • Olá pessoal.
    Estou com um problema que não estou conseguindo resolver.

    Surgiu uma demanda de passar os testes aqui de onde eu trabalho para o Docker, porém tem 2 testes que estão falhando.
    Pesquisando, eu notei que o problema é em um formulário de login, vamos por partes…

    Eu tenho um formulário com 3 campos e um botão. É um formulário básico de login.

    Originalmente, meus testes estavam utilizando o PhantomJS. Tirei algumas screenshots para debugar os testes que estavam falhando, notei que o login não era feito mesmo o comando de clicar no botão sendo executado normalmente.

    Resolvi então testar com outro drive, fui para o chrome_headless, sem sucesso, pois os mesmos testes falharam. Novamente debuguei com o screenshot, mas para minha surpresa, aparentemente, estava fazendo o login, mas estava indo para uma tela em branco.

    Pesquisei feito um louco aqui o motivo de direcionar para uma tela em branco, mas todas as sugestões falharam, nada de retornar os dados.
    Quando eu executo meus testes fora do Docker o login é feito normalmente.

    Meu último recurso foi pedir ajuda aqui no fórum.
    Meu spec_helper.rb:

    Capybara.register_driver :chrome do |app|
      Capybara::Selenium::Driver.new(app, browser: :chrome)
    end
    
    Capybara.register_driver :headless_chrome do |app|
      capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
        chromeOptions: { args: %w(--headless --no-sandbox window-size=1366,768) }
      )
    
      Capybara::Selenium::Driver.new app, browser: :chrome, desired_capabilities: capabilities
    end
    
    Capybara.javascript_driver = :headless_chrome
    Capybara.default_driver = :headless_chrome
    

    Para executar meus testes eu preciso subir 4 containers no docker, para funcionar tudo corretamente eu preciso adicionar alguns domínios (dos containers) no container dos meus testes.
    /etc/hosts :

    172.18.0.1 localhost nginx searchengine.docker php53.docker php7.docker
    

    URL que eu acesso:

    http://nginx:9209/teste/auth?store=xxxxxx&adm_user=xxxxxx&url=http://php53.docker:9000
    

    URL que deveria acessar:

    http://nginx:9209/teste/backoffice/config/15
    

    No Docker eu estou utilizando o Ubuntu 18.04

  • Você está utilizando pageObject?

  • @Luiz-Lohn, por enquanto não.
    É um projeto relativamente novo, passei de Behat para RSpec recentemente. Pretendo refatorar o projeto assim que funcionar no Docker.

    Falando nisso, esqueci de passar o código dos testes:

    it 'Realizar a reindexação total de produtos' do
        # Setup
        # Execise
        login_search('root')
        page.save_screenshot
        # expect(page).to have_content('Indexação completa de produtos')
        # expect(page).to have_css('button', :text => 'Indexar tudo')
        # find('button', text: 'Indexar tudo').trigger('click')
        sleep(10)
        # Verify
        # expect(page).to have_no_content('Indexar tudo')
      end
    

    Arquivo com o função “login_search”:

    def login_search(permissao)
      if permissao == 'root'
        usuario = 'xxxxxx'
        senha = 'xxxxx'
      else
        usuario = 'xxxxxx'
        senha = 'xxxxxx'
      end
    
      visit ENV['url_search_config']
    
      current_url = page.current_path
    
      if current_url.include? 'login'
        fill_in('loja', :with => 'xxxxxx')
        fill_in('usuario', :with => usuario)
        fill_in('senha', :with => senha)
        click_button('Entrar')
      end
    end
    
  • Pessoal, resolvi o problema.

    Fiz um debug aqui e percebi que um dos links acessados não estava registrado no meu arquivos hosts.
    Adicionei e voltou a funcionar.