Estou usando o Selenium RC para automatizar algumas operações do navegador, mas quero que o navegador fique invisível. Isso é possível? Quão? E quanto ao Selenium Grid? Posso ocultar a janela Selenium RC também?
Estou usando o Selenium RC para automatizar algumas operações do navegador, mas quero que o navegador fique invisível. Isso é possível? Quão? E quanto ao Selenium Grid? Posso ocultar a janela Selenium RC também?
Respostas:
Existem algumas opções:
Você pode usar o Selenium Grid para que o navegador seja aberto em uma máquina completamente diferente (ou máquina virtual), à qual você pode se conectar via VNC ou Conexão de Área de Trabalho Remota, se quiser ver o navegador. Além disso, outra opção: se você executar um processo de primeiro plano do Jenkins nesse servidor remoto, ele poderá executar seu projeto de teste na área de trabalho.
Você pode executar o Selenium 'headless' no Linux no XVFB. Nunca tentei fazer isso e duvido que realmente valha o esforço. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Você pode envolver o Selenium RC em um serviço do Windows. http://support.microsoft.com/kb/137890 . Exceto que as restrições de permissões em versões posteriores do Windows provavelmente impedirão o Selenium de acessar a área de trabalho como o Windows 2000 costumava nos permitir fazer.
Outra opção seria usar algo como WebDriver HTMLUnitDriver, que não inicia um navegador 'real'. http://code.google.com/p/webdriver/ . Também existe uma opção PhantomJS, bem como um 'Chrome headless' que você pode usar.
É claro que também existe a opção de usar um serviço como o SauceLabs, onde você pode fazer com que seus testes sejam executados na nuvem. Após a conclusão dos testes, você pode assistir a um vídeo deles em execução.
No Linux, você pode executar o WebDriver em uma tela sem cabeça (virtual) para ocultar o navegador. Isso pode ser feito com o Xvfb (X framebuffer virtual).
Você pode controlar o Xvfb diretamente do código Python usando xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
O código Python para execução sem comando ficaria assim:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
Instale dependências no Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
Eu facilmente consegui esconder a janela do navegador.
Basta instalar o PhantomJS . Então, mude esta linha:
driver = webdriver.Firefox()
para:
driver = webdriver.PhantomJS()
O resto do seu código não precisará ser alterado e nenhum navegador será aberto. Para fins de depuração, use driver.save_screenshot('screen.png')
em diferentes etapas do seu código.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
1 para Selenium RC como um serviço do Windows.
Por ter os testes rodando totalmente escondidos, acho que você não tem muitas soluções se estiver no windows.
O que eu faria para dedicar um computador em sua LAN para ficar online o tempo todo e ter um servidor selenium RC funcionando. Portanto, você usa o IP desse computador em vez de localhost para executar seus testes. Por exemplo:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(considerando que esse é o ip do computador rodando o servidor).
Com essa configuração, você executa seus testes em seu computador, os navegadores e a janela do servidor RC ficam em outro computador e volte para o seu quando terminar.
No Linux, você pode executar seu navegador de teste em uma tela virtual. Você precisará do xvfb
pacote para criar um servidor X virtual. Em distros baseadas em Debian, basta executar
sudo apt-get install xvfb
Há uma ferramenta interessante ephemeral-x.sh
que configura convenientemente qualquer comando para ser executado no visor virtual. Faça o download e torne-o executável:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Depois, você pode simplesmente usá-lo para iniciar o servidor Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Todas as janelas do navegador criadas pelo Selenium agora usarão o visor virtual e ficarão invisíveis para você.
Se você estiver no Windows, uma opção é executar os testes com uma conta de usuário diferente . Isso significa que o navegador e o servidor java não ficarão visíveis para sua conta.
É assim que eu executo meus testes com o maven em um desktop Linux (Ubuntu). Fiquei farto de não poder trabalhar com o webdriver do firefox sempre focado.
Eu instalei o xvfb
instalação limpa xvfb-run -a mvn
É isso aí
Em muitos casos, o PhantomJS não atenderá completamente às suas necessidades, gostaria de elaborar sobre a opção de cromo sem cabeça mencionada na resposta de Dave Hunt.
O Chrome 57 acaba de lançar esse recurso. Você pode usá-lo passando a sinalização --headless por meio do ChromeDriver; para obter mais informações, consulte a discussão nesta questão
Há um projeto relacionado ao PhantomJS chamado GhostDriver , que foi criado para executar instâncias do PhantomJS em uma grade do Selenium usando o protocolo JSON do webdriver wire. Provavelmente é isso que você está procurando, embora esta questão já tenha 4 anos.
No MacOSX, não consegui ocultar a janela do navegador, mas pelo menos descobri como movê-la para uma tela diferente para não atrapalhar tanto meu fluxo de trabalho. Enquanto o Firefox está executando os testes, basta controlar e clicar em seu ícone no dock, selecionar Opções e Atribuir ao monitor 2.
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
A propósito, este é um recurso necessário para qualquer desenvolvedor executando o e2e que logicamente irá gerar navegadores. Em um ambiente de desenvolvimento, é irritante lidar com a janela que sempre aparece e com a qual você pode acidentalmente interagir fazendo o teste falhar.
Usar o Chrome headless seria sua melhor aposta, ou você poderia postar diretamente no site para interagir com ele, o que economizaria muito poder de computação para outras coisas / processos. Eu uso isso ao testar bots de automação da web que procuram sapatos em vários sites usando elementos pesados da CPU, quanto mais energia você economiza e quanto mais simples seu programa é, mais fácil é executar vários processos ao mesmo tempo com muito mais velocidade e confiabilidade.