É possível ocultar o navegador no Selenium RC?

92

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?

Yatendra Goel
fonte
Pode não ser aceitável, mas você não poderia simplesmente mover o navegador para fora da tela (usando a automação de IU do Windows normal?), Por exemplo, colocar a janela em (-10000, -10000)?
BrainSlugs83
2
Uma vez que esta pergunta é antiga agora, deixe-me redirecioná-lo para uma resposta adequada e atualizada no final desta página .
Stéphane Bruckert

Respostas:

87

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.

Dave Hunt
fonte
Aqui estão as instruções sobre como criar um arquivo bat para instalar o serviço: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard
58

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
Corey Goldberg
fonte
Quando o código é executado em um navegador virtual, posso continuar usando meu PC normalmente enquanto o script de interação do navegador é executado?
Mugen
Os recursos estão esgotados, sua máquina ficará mais lenta!
Tim Long
22

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.

Stéphane Bruckert
fonte
5
Vale ressaltar que é necessário colocar o caminho do PhantomJs.exe para que isso funcione. exemplodriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG
1
Sim, mas apenas no Windows.
Stéphane Bruckert
1
você não precisa especificar a localização do binário, desde que ele possa ser encontrado na variável de ambiente $ PATH do seu ambiente.
Corey Goldberg
13

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.

Santi
fonte
12

No Linux, você pode executar seu navegador de teste em uma tela virtual. Você precisará do xvfbpacote para criar um servidor X virtual. Em distros baseadas em Debian, basta executar

sudo apt-get install xvfb

Há uma ferramenta interessante ephemeral-x.shque 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ê.

pixelistik
fonte
Este script tem um problema de cotação. Se eu disser ./ephemeral-x.sh foo '*', ele dirá "Executando: foo" seguido pelo conteúdo do meu diretório.
Nick Retallack
4

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.

Igor Brejc
fonte
3

É 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í

Paul Whelan
fonte
Freqüentemente, essa é a maneira mais fácil de garantir que o xvfb esteja em execução e seja usado pelo Selenium / WebDriver.
Samuli Pahaoja
1

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

Marlies
fonte
0

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.

Djangofan
fonte
0

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.

Chetstone
fonte
0
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.

Nestor Urquiza
fonte
0

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.

LiamººT
fonte