[Victor Pantoja] Criando Múltiplos Perfis de User Agents no Firefox para o Selenium

Trabalho desenvolvendo aplicativos e sites para dispositivos móveis e temos algumas maneiras de simular user-agents para testar os sites.

Criamos a cultura de criar uma integração contínua para todos os projetos. Isso envolve testes unitários, funcionais e de aceitação.

Nossos sites possuem dois perfis: iphone e standard (para tudo que não for iphone). Essa diferenciação é feita através de uma regra de apache (mod_rewrite) que inclui /iphone ou /standard na URL sem que o usuário veja. Para rodar os testes de integração contínua, essa regra não é criada e chamamos a url com o /perfil

Pois bem: estamos trabalhando em uma aplicação WEB em que não é possível passar o /perfil
por alguns motivos. Então, nos deparamos com um problema: como testar os múltiplos perfis de handsets?

A solução foi criar dois profiles no Firefox (iPhone e Standard) e passa-los para o Selenium. Separamos os testes de aceitação nos dois profiles e rodamos um após o outro (usamos Makefile).

Um profile pode ser criado com o comando $ firefox -P.

Mas veio a pergunta: como criar um profile iPhone e outro standard? A solução foi usar o about:config do Firefox (digite isso no campo url: ‘about:config’, sem as aspas. Não mexa nos campos se você não souber o que está fazendo).

O campo selecionado de vermelho é exatamente o que deve ser alterado. No momento da criação do profile, alteramos essa propriedade de acordo com o profile que estamos criando. Dê dois cliques e digite o user-agent que você deseja. Eu uso ‘iPhone’ para o profile iPhone e ‘NokiaN90′ para o profile standard.

Eu salvei em /home//iphone e /home//standard. O selenium deve ser inicializado assim:
$ java -jar selenium.jar -firefoxProfileTemplate “/home/usuario/iphone” ou
$ java -jar selenium.jar -firefoxProfileTemplate “/home/usuario/standard”

Depois, joguei esses profiles dentro do projeto e acertei o selenium para chama-los a partir do novo path.

Os testes funcionaram perfeitamente. A título de curiosidade, o trecho do Makefile está abaixo:
selenium_up: selenium_down
@echo “Running selenium server with $(profile) profile…”
@java -jar data/selenium-server/selenium-server.jar -firefoxProfileTemplate data/selenium-server/profiles/$(profile) 2>&1 > /dev/null &

Chame o make passando o profile:
$make selenium_up profile=iphone
$make selenium_up profile=standard

E tudo deve funcionar.