Escrever testes com Selenium geralmente é uma tarefa que, ou é amada ou é odiada com todas as forças do indivíduo que a executa. Isso acontece principalmente devido às inúmeras formas e ferramentas disponíveis para escrever os seus testes de aceitação. Por exemplo, em Rails quem usa o Cucumber com certeza deve gostar muito de escrever tais testes, já quem usa o Selenium IDE não deve ficar muito feliz depois de algumas semanas repetindo várias e várias coisas.
Executar os testes é outra tarefa muito legal e motivante, ver as coisas acontecendo de forma automática é lindo, mas com o tempo isso começa a ficar muito chato, cansativo e a levar tempo de mais, tempo que você não pode esperar toda vez que quiser fazer um commit ou um push ou até mesmo uma integração para build. Com isso vem a idéia de um servidor de integração contínua onde todos os testes serão executados automaticamente do jeito que você desejar: a cada commit/push, tantas vezes por dia, etc.
Novamente tudo fica muito bom quando o servidor de integração contínua está executando tudo e dando conta do recado, mas e se o servidor disponibilizado não tiver um ambiente gráfico? Ou melhor, e se você questionar a razão de ter um ambiente gráfico num servidor como esse? Bom, há de pensar que sem interface gráfica não é possível executar o browser (exceto o lynx, eu sei), então o que fazer? Para resolver este problema existe o Xvfb, um projeto que serve exatamente para máquinas sem display.
O Xvfb cria um buffer virtual em memória e executa o X Server a partir daí, redirecionando o que deveria ser a saída VGA para a memória, e com isso você consegue um X Server virtual rodando sem display, apenas em memória. Com isso já é possível rodar o browser (e qualquer outra coisa que precisa de um X Server), logo, é possível executar todos os seus testes do Selenium. Um detalhe interessante é a possibilidade de ter qualquer resolução disponível agora, mesmo aquelas que um monitor não poderia te proporcionar.
Vamos agora a instalação e execução do Xvfb:
Instalando o Xvfb
jeveaux@valakas ~ $ sudo apt-get install xvfb
Executando o Xvfb
jeveaux@valakas ~ $ Xvfb :1 -screen 0 1600x1200x32
Com o comando acima vamos iniciar um novo servidor X (:1), screen 0 (-screen 0), resolução de tela de 1600×1200 e 32bits de cores. Agora para abrir o firefox neste servidor:
jeveaux@valakas ~ $ DISPLAY=:1 firefox
E se você quiser acessar visualmente a saída criada pelo Xvfb pode usar algum cliente VNC como o x11vnc e conectar-se no display criado:
jeveaux@valakas ~ $ sudo apt-get install x11vnc
jeveaux@valakas ~ $ x11vnc -display :1
E pronto! Obviamente o Xvfb não deve ser usado exclusivamente para o Firefox/Selenium, este post foi apenas uma abordagem dentre as milhares de soluções que podem se beneficiar de um X Server virtual.
Olá estou tentando seguir os passos indicados acima, mas estou recebendo o seguinte erro quando executo o “Xvfb :1 -screen 0 1600x1200x32”.
ERRO:
“couldn ‘t add screen 0”
estou usando uma maquina debian 64Bit, procurando em outros lugares encontrei comandos como:
“Xvfb :1 -screen 0 1600×1200+32”, “Xvfb :1 -screen 0 800x600x24&”
ainda sem sucesso.
Embora o comentário seja antigo, deixo para referência: 32 não é um valor válido para a profundidade (https://bugs.freedesktop.org/show_bug.cgi?id=17453).
O Xvfb pode ser iniciado com a seguinte instrução
Xvfb -ac :5 -screen 0 1600x1200x24+32