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


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.


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

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.


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.


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ê.


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.


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í


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


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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.