Avançar para o conteúdo principal

Teste de Seleção no Picker Google Account utilizando Junit para Android e Robotium


Olá a todos, 

Venho partilhar uma possivel solução para a dificil tarefa de fazer um teste unitário que escolha a conta Google no objecto Picker.
Devido há falta de informação na web sobre este tema, achei interessante publicar.

O algoritmo é muito simples.

Vamos precisar dos Objetos:
Instrumentation para obter o controle do equipamento.

IntentFilter estrutura que vai servir para encontrar a informação que queremos.


Intent para criar o conjunto de ações que vão ser feitas;

ActivityResult para chamar a Atividade e devolver o resultado, neste caso será a conta Google.

ActivityMonitor será o nosso monitor que com base no filtro criado e a Activity consegue selecionar o Account.  Será este objeto um dos mais importantes para conseguir selecionar o Account. No seu contrutor o primeiro parâmetro é o filtro sobre a informação que queremos "apanhar", o segundo parâmetro é Activity que vai ser lançada pelo Monitor e o terceiro é o Block de Instrumentação, True apenas o Monitor pode usar a Intrumentação neste instante, a False outros objetos podem utilizar a intrumentação.

Uma das tentações que temos é colocar este parâmetro a False para que o Solo também possa utilizar a Instrumentação o problema é que não funciona e o Monitor não consegue selecionar a conta. A solução mais adequada é após a Instanciação do Monitor adicionar o mesmo à Instrumentação, depois Instanciar o nosso Solo (Robotium) e logo a seguir remover o Monitor da Instrumentação.

Solo é o nosso objeto para utilizar o Robotium.

Assim o Monitor faz o seu trabalho e quando termina passa o controlo ao nosso Robotium :)

Com isto podemos usar o Solo para escrever ou clicar da forma natural para que foi concebido sem ter que usar funções do Java diretas para clicar nos botões.

Abaixo fica um exemplo de teste que seleciona uma conta Google, escreve o nome de utilizar e password e clica no botão Login.


public void testASelectAccount() throws InterruptedException{

Instrumentation inst = getInstrumentation();
IntentFilter filter = new IntentFilter("com.google.android.gms.common.account.CHOOSE_ACCOUNT");
Intent result = new Intent();
result.putExtra(AccountManager.KEY_ACCOUNT_NAME, "o_meu_emai_google@gmail.com"); ActivityResult act = new ActivityResult(Activity.RESULT_OK,result);
ActivityMonitor mon = new ActivityMonitor(filter, act, true); //Instanciação do Monitor
inst.addMonitor(mon); //Monitor adicionado à instrumentação

Solo solo=new Solo(inst, getActivity()); //Instanciação do Solo

inst.removeMonitor(mon); //Remoção do Monitor

//Solo no controle a inserir o nome de utilizar a password nas caixas de texto a clicar no botão de login
EditText user, password;
user = (EditText) solo.getView(R.id.txtUtilizador);
password= (EditText) solo.getView(R.id.txtPassword);

solo.clearEditText(user); //opcional se não estiverem a guardar dados
solo.clearEditText(password); //opcional se não estiverem a guardar dados

solo.typeText(user, "o_meu_nome");
solo.typeText(password, "a_minha_password");
Thread.sleep(2000);
Button btn = (Button)solo.getView(R.id.btnLogin);
solo.clickOnView(btn);
solo.waitForDialogToClose();
Thread.sleep(2000);
solo.waitForDialogToClose();

solo.assertCurrentActivity("Não foi possivel fazer login", MainActivity.class) ; //Verifica se entrou na aplicação

solo.finishOpenedActivities();

}

Comentários

Mensagens populares deste blogue

3 Formas de configurar o Wi-Fi no ESP8266

3 Formas de  configurar o Wi-Fi no ESP8266 O nosso famoso ESP8266 veio para ficar, cada vez mais este microcontrolador é utilizado para desenvolver dispositivos fantásticos, é verdade que o ESP pode ser utilizado como um simples MCU , mas é a sua capacidade de se ligar a uma rede Wi-Fi, faz dele a escolha perfeita no que toca dipositivos IoT . Este artigo tem foco em três diferentes soluções que permitem programar o ESP de forma a que este se consiga ligar a uma rede Wi-Fi. É sabido que da primeira vez que o ESP é energizado este tem de conhecer ou vir a conhecer o SSID e a Password configurada no Access Point ao qual o queremos conectar de forma a fazer para da rede e ter acesso à Internet se assim for necessário. Vamos então ver como implementar as três soluções, analisar cada uma delas e ponderar os prós e contras e cada uma delas. Passemos ao caso mais simples, ao qual denomino de “Hard Coded” , esta é a forma mais utilizada por quem começa a utilizar

Instalação do SQLPLUS da ORACLE em LINUX

Bom dia a todos Hoje vou explicar como podemos instalar o SQLPLUS da Oracle em sistemas Linux que utilizem gestão de pacotes RPM, entre eles CENTOS, FEDORA etc.. O SQLPLUS é uma excelente ferramenta de administração de SGDB da Oracle e apresenta-se sob o formato de linha de comandos o que permite aos Administradores de Base de Dados um maior poder sobre o SGDB. Antes de mais é necessário ter uma conta Oracle, esta pode ser feita atraves de um registo no site e é totalmente gratuito. Após termos conta devemos ir à secção de Download -> Databases -> Oracle Instant Client URL:   http://www.oracle.com/technetwork/indexes/downloads/index.html É apresentada uma lista sistemas operativos suportados e no nosso caso vamos escolher    Instant Client for Linux x86-64   para versões 64 Bits Ao escolhermos o Sistema Operativo a Oracle mostra-nos todas aplicações de Cliente para as diversas versões de Base de dados. A ultima versão é a 12 no entanto devemos fazer o downl

Mosquitto MQTT - Como Apagar todas as Mensagem Retain

Olá malta, hoje venho partilhar convosco algo que pode dar muito jeito quando andamos a testar cenários em que temos mensagens MQTT Retained . Um mensagem com a Flag Retain fica guardada no Broker MQTT até que seja subscrita por outra . Uma solução rápida para eliminar a mensagem Retain será publicar no mesmo tópico uma mensagem vazia , no entanto se tivermos muitos tópicos com mensagens Retain pode dar muito trabalho por isso uma forma simples será eliminar a base de dados do Mosquitto e todas as mensagem Retain são perdidas. Este cenário pode parecer uma pouco Brute Force mas se pensar-mos bem, assim que os nossos sensores/atuadores se ligarem novamente ao Broker MQTT vão publicar novamente a mensagem Retain que realmente interessa :) Procedimento sudo service mosquitto stop sudo rm /var/lib/mosquitto/ mosquitto.db sudo service mosquitto start DONE.... Espero ter ajudado :) Grande Abraço