É possível ocultar o navegador em Selenium RC?
-
07-07-2019 - |
Pergunta
Eu estou usando Selenium RC para automatizar algumas operações do navegador mas eu quero o navegador para ser invisível. Isso é possível? Quão? E sobre Selenium Grid? Posso ocultar a janela do Selenium RC também?
Solução
Existem algumas opções:
-
Você pode usar Selenium grade para que o navegador é aberto em uma máquina completamente diferente (ou máquina virtual), que você pode conectar-se via VNC ou Remote Desktop Connection se você queria ver o browser. Além disso, uma outra opção:. Se você executar um processo em primeiro plano Jenkins no servidor remoto, ele pode executar o seu projeto de teste no ambiente de trabalho
-
Você pode executar Selenium 'sem cabeça' no Linux em XVFB. Eu nunca tentei fazer isso e duvido que é realmente vale a pena o esforço. http://www.alittlemadness.com/2008/03/05/ running-selênio-decapitado /
-
Você pode embrulhar Selenium RC em um serviço do Windows. http://support.microsoft.com/kb/137890 . Exceto que as permissões restrições em versões posteriores do Windows provavelmente irá impedir Selênio de acessar o desktop como o Windows 2000 usado para permitir que façamos.
-
Outra opção seria usar algo como WebDriver HTMLUnitDriver, que não lançar um navegador 'real'. http://code.google.com/p/webdriver/ . Também há uma opção PhantomJS, bem como um 'sem cabeça Chrome' que você poderia usar.
-
Claro que há também a opção de usar um serviço como SauceLabs, onde você pode obter os seus testes a serem executados na nuvem. Após os testes de ter concluído que você pode assistir a um vídeo deles em execução.
Outras dicas
No Linux, você pode executar WebDriver em um sem cabeça display (virtual) para esconder o browser. Isso pode ser feito com Xvfb (X framebuffer virtual).
Você pode controlar Xvfb diretamente do código Python usando xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
código Python para executar sem cabeça 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()
Instalar dependências em Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
I facilmente conseguiu esconder a janela do navegador.
Apenas instalar PhantomJS . Em seguida, altere esta linha:
driver = webdriver.Firefox()
para:
driver = webdriver.PhantomJS()
O resto do seu código não precisará ser alterado e nenhum navegador será aberta. Para fins, o uso driver.save_screenshot('screen.png')
depuração em diferentes etapas de seu código.
+1 para Selenium RC como um serviço do Windows.
Para ter os testes executados completamente escondido, eu acho que você não tem muito soluções, se você estiver no Windows.
O que eu faria para dedicar um computador em seu LAN para estar online o tempo todo e tem um servidor Selenium RC em execução. Então você usa IP do computador em vez de localhost para executar os testes. Por exemplo:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(considerando que esse é o ip do computador que executa o servidor).
Tendo essa configuração, você executar os testes em seu computador, os navegadores e janela de servidor do RC estão em outro computador e as costas ir ao seu feito uma vez.
No Linux, você pode executar o seu navegador teste em uma tela virtual. Você vai precisar do pacote xvfb
para a criação de um servidor X virtual. Em distros baseadas no Debian, basta executar
sudo apt-get install xvfb
Há uma boa ferramenta ephemeral-x.sh
que irá convenientemente configurar qualquer comando para executar no visor virtual. Faça o download e torná-lo executável:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Em seguida, você pode simplesmente usá-lo para iniciar o servidor Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Todas as janelas do navegador criados por selênio irá agora usar o monitor virtual e será invisível para você.
Se você estiver no Windows, uma opção é executar os testes em uma conta de usuário diferente . Isso significa que o servidor navegador e Java não será visível para a sua própria conta.
Isto é como eu corro meus testes com o Maven em um desktop linux (Ubuntu). I got alimentado não ser capaz de trabalhar com o firefox Webdriver sempre levando foco.
Eu instalei xvfb
xvfb prazo -a mvn clean install
Thats it
Em muitos casos, PhantomJS não irá atender completamente suas necessidades, eu gostaria de elaborar sobre a opção sem cabeça cromo mencionado na resposta de Dave Hunt.
cromo 57 acaba de lançar este recurso. Você pode usá-lo, passando a bandeira --headless via ChromeDriver, para mais informações ver a discussão em esta questão
Há um projeto relacionado PhantomJS chamado GhostDriver , que se destina a executar instâncias PhantomJS em uma grade Selenium usando fio Webdriver protocolo JSON. Isso é provavelmente o que você está procurando, embora esta questão é de 4 anos de idade agora.
Em MacOSX, eu não tenho sido capaz de esconder a janela do navegador, mas pelo menos eu descobri como movê-lo para uma exibição diferente para que ele não perturbar o meu trabalho tanto. Enquanto o Firefox está em execução testes, apenas controlar-clique em seu ícone no Dock, selecione Opções e, em Atribuir para exibir 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
Pela forma como este é um recurso necessário por qualquer e2e correndo desenvolvedor que logicamente irá aparecer navegadores. Em um ambiente de desenvolvimento é irritante para lidar com a janela que continua aparecendo e que o que você pode acidentalmente interagem fazer o teste falhar.
Usando sem cabeça Chrome seria a sua melhor aposta, ou você pode postar diretamente para o site para interagir com ele, o que permitiria poupar uma grande quantidade de poder computacional para outras coisas / processos. Eu uso isso quando testando bots automação web que procura por sapatos em vários sites usando elementos cpu pesados, mais poder de salvar, e quanto mais simples o seu programa é, o que é mais fácil executar vários processos ao mesmo tempo com velocidade maior MUHC e confiabilidade.