package br.gov.serpro.cte.common; import org.apache.commons.lang.StringUtils; /** * Contem metodos comuns a todos os casos de teste do ExpressoMail. * * @author L.F.Estivalet (Serpro) * * Created on Nov 12, 2010 at 11:52:43 AM * */ public class ExpressoMailTestCase extends BaseTestCase { /** * Entra no modulo ExpressoMail. * * @throws Exception */ public void enterExpressoMail() throws Exception { super.login(); selenium.open("/expressoMail1_2/index.php"); selenium.waitForPageToLoad("30000"); // Espera a caixa de entrada carregar. this.waitForElement(getCampo("email.div.principal")); } /** * Procura um email pelo seu assunto. * * @param subject * Assunto a ser procurado. * @return "id" do email. */ public String findEmailIdBySuject(String subject) { return findEmailIdBySuject(subject, false); } /** * Procura um email pelo seu assunto. * * @param subject * Assunto a ser procurado. * @param select * Se email encontrado, deseja seleciona-lo? * @return "id" do email. */ public String findEmailIdBySuject(String subject, boolean select) { String html = selenium.getHtmlSource(); String part1 = StringUtils.substringBefore(html, subject); int start = StringUtils.lastIndexOf(part1, "id=\"") + 4; int last = StringUtils.indexOf(part1, "\">", start); String id = StringUtils.substring(part1, start, last); if (select) { // Marca checkbox correspondente ao id da mensagem. selenium.click("check_box" + id.substring(1)); } // Retorna somente o "id" do email. // id = id.substring(id.lastIndexOf("_")); return id; } private void writeBody(String text) { selenium.getEval("selenium.browserbot.getCurrentWindow().document.getElementById('body_1').contentWindow.document.body.innerHTML='" + text + "';"); } /** * Cria um novo email informando destinatario, assunto e conteudo do email. * * @param to * Destinatário (campo Para:). * @param subject * Assunto do email. * @param text * Conteudo do email. * @throws Exception */ public void composeEmail(String to, String subject, String text) throws Exception { this.composeEmail(); selenium.type(getCampo("email.para.1"), to); selenium.type(getCampo("email.assunto.1"), subject); this.writeBody(text); } /** * Cria um novo email informando destinatario, assunto e conteudo do email. * * @param to * Destinatário (campo Para:). * @param subject * Assunto do email. * @throws Exception */ public void composeEmail(String to, String subject) throws Exception { this.composeEmail(); selenium.type(getCampo("email.para.1"), to); selenium.type(getCampo("email.assunto.1"), subject); } /** * Cria um novo email. * * @throws Exception */ public void composeEmail() throws Exception { this.enterExpressoMail(); selenium.click(getCampo("email.nova.mensagem")); super.waitForElement(getCampo("email.para.1")); } /** * @param to * Destinatário (campo Para:). * @param subject * Assunto do email. * @param text * Conteudo do email. * @param remove * Se true, remove o logo apos o envio da Caixa de * Entrada, itens enviados e lixeira. Simula o envio de email ao * pressionar o botao Enviar. */ public void sendEmail(String to, String subject, String text, boolean remove) throws Exception { this.composeEmail(to, subject, text); selenium.click(getCampo("email.enviar.email.1")); this.assertMessage(getCampo("email.mensagem"), getMensagem("email.enviado")); if (remove) { this.removeEmail(subject); } } /** * Pressiona opcao para enviar o email. */ public void sendEmail() { selenium.click(getCampo("email.enviar.email.1")); } /** * Procura o email pelo assunto e abre para leitura. * * @param subject * Assunto do email. * @return "id" do email. * @throws Exception */ public String readEmail(String subject) throws Exception { this.enterExpressoMail(); String id = this.findEmailIdBySuject(subject); selenium.click(id); // Espera ate aba da mensagem abrir. super.waitForElement(getCampo("email.aba.mensagem")); // Retorna somente o "id" do email. id = id.substring(id.lastIndexOf("_")); return id; } /** * Apaga o email previamente selecionado. */ public void deleteEmail() throws Exception { selenium.click(getCampo("email.apagar.email")); this.assertMessage(getCampo("email.mensagem"), getMensagem("apagar.uma.mensagem")); } /** * Apaga o email de acordo com o assunto. * * @param subject * Assunto a ser pesquisado. No caso da pesquisa encontrar varios * emails, apenas o primeiro sera selecionado e apagado. * @throws Exception */ public void deleteEmail(String subject) throws Exception { this.findEmailIdBySuject(subject, true); this.deleteEmail(); } /** * Apaga email de uma pasta de acordo com o assunto. * * @param folder * Pasta a ser pesquisada. * @param subject * Assunto a ser pesquisado. * @throws Exception */ public void deleteEmail(String folder, String subject) throws Exception { // Apaga email da pasta enviados. this.openFolder(folder); // Espera pelo primeiro checkbox da pasta aparecer. super.waitForElement(getCampo("email.checkbox.email")); this.deleteEmail(subject); this.waitForElement(getCampo("email.msg.info")); assertTrue(getMensagem("pasta.vazia").equals( selenium.getText(getCampo("email.msg.info")))); } /** * Remove o email de acordo com o assunto da Caixa de Entrada, dos itens * enviados e da lixeira. * * @param subject * Assunto a ser pesquisado. No caso da pesquisa encontrar varios * emails, apenas o primeiro sera selecionado e apagado. * @throws Exception */ public void removeEmail(String subject) throws Exception { // Faz logout para dar tempo para o email chegar na Caixa de Entrada. super.logout(); // Entra novamente no ExpressoMail e apaga o email da Caixa de Entrada. this.enterExpressoMail(); this.deleteEmail(subject); // Apaga email da pasta enviados. this.deleteEmail(getCampo("email.pasta.enviados"), subject); // Limpa a lixeira. super.logout(); this.enterExpressoMail(); this.cleanupTrash(); } /** * Limpa a lixeira. * * @throws Exception */ public void cleanupTrash() throws Exception { this.openFolder(getCampo("email.pasta.lixeira")); selenium.click(getCampo("email.limpar.lixeira")); assertTrue(selenium.getConfirmation().matches( getMensagem("limpar.lixeira"))); super.waitForElement(getCampo("email.mensagem")); assertEquals(getMensagem("lixeira.limpa"), selenium.getText(getCampo("email.mensagem"))); // Garantir que nao tem nenhum email na lixeira. assertEquals("0", this.getTotalEmails()); } /** * @return Numero de emails na pasta selecionada. */ public int getTotalEmails() { return Integer .valueOf(selenium.getText(getCampo("email.total.emails"))); } /** * @return Ids de todos os emails da pasta selecionada. */ public String[] getEmailIds() { String[] ids = new String[this.getTotalEmails()]; for (int i = 1; i <= this.getTotalEmails(); i++) { String id = selenium.getAttribute(getCampo("email.id", i)); ids[i - 1] = id.substring(id.lastIndexOf("_") + 1); } return ids; } /** * @param emailId * Id do email. * @return true se email importante, false caso * contrario. */ public boolean isImportant(String emailId) { return selenium.isElementPresent(getCampo("email.id.importante", emailId)); } /** * @param emailId * Id do email. * @return true se email lido, false caso * contrario. */ public boolean isRead(String emailId) { return "Lida".equals(selenium.getAttribute(getCampo("email.id.lido", emailId))); } /** * Abre uma pasta de email especifica. * * @param folder * Pasta de email a ser aberta. * @throws Exception */ public void openFolder(String folder) throws Exception { selenium.click(folder); this.waitForElement(getCampo("email.div.principal")); } /** * Responder email. * * @param id * Id do email a ser respondido. * @throws Exception */ public void replyEmail(String id) throws Exception { // Clicar na opcao para responder. selenium.click(getCampo("email.responder.email")); this.reply(id); } /** * Responder email a todos destinatarios. * * @param id * Id do email a ser respondido. * @throws Exception */ public void replyAllEmail(String id) throws Exception { // Clicar na opcao para responder. selenium.click(getCampo("email.responder.todos", id)); selenium.click(getCampo("email.id.responder.todos", id)); this.reply(id); } /** * Responder email a todos destinatarios sem historico. * * @param id * Id do email a ser respondido. * @throws Exception */ public void replyAllEmailWithoutHistory(String id) throws Exception { // Clicar na opcao para responder. selenium.click(getCampo("email.responder.todos.sem.historico", id)); selenium.click(getCampo("email.id.responder.todos.sem.historico", id)); this.reply(id); } /** * Responder email sem historico. * * @param id * Id do email a ser respondido. * @throws Exception */ public void replyEmailWithoutHistory(String id) throws Exception { // Clicar na opcao para responder. selenium.click(getCampo("email.id.responder.sem.historico", id)); this.reply(id); } /** * Responder email, serve apenas para clicar na opcao "Enviar". * * @param id * Id do email a ser respondido. * @throws Exception */ private void reply(String id) throws Exception { // Espera carregar aba para responder email. super.waitForElement(getCampo("email.id.para", id)); selenium.click(getCampo("email.id.enviar", id)); } /** * Encaminha uma mensagem. * * @param id * Id da mensagem a ser encaminhada * @param to * Destinatario * @throws Exception */ public void forwardEmail(String id, String to) throws Exception { // Clicar na opcao para encaminhar. selenium.click(getCampo("email.encaminhar.email")); // Espera carregar aba para encaminhar email. super.waitForElement(getCampo("email.id.para", id)); selenium.type(getCampo("email.id.para", id), to); selenium.click(getCampo("email.id.enviar", id)); } // public enum Mensagem { // PASTA_VAZIA("Esta pasta está vazia"), // // SEM_DESTINATARIO( // "Você deve fornecer pelo menos um endereço de destinatário de email."), // // // SEM_ASSUNTO("^Enviar esta mensagem sem assunto[\\s\\S]$"), // // EMAIL_ENVIADO("Sua mensagem foi enviada e salva."), // // DESTINATARIO_INVALIDO( // "Erro de SMTP: Os endereços de destinatário a seguir falharam: bla@"), // // SALVA_RASCUNHO( // "Sua mensagem foi salva como rascunho na pasta Rascunhos."), // // LIMPAR_LIXEIRA( // "^Você tem certeza que deseja limpar sua lixeira[\\s\\S]$"), // // LIXEIRA_LIMPA("Sua pasta Lixeira foi limpa."), // // APAGAR_UMA_MENSAGEM("Mensagem movida para a pasta Lixeira"), // // MARCAR_IMPORTANTE("Mensagem marcada como Importante"), // // MARCAR_NORMAL("Mensagem marcada como Normal"), // // MARCAR_NAO_LIDO("Mensagem marcada como Não lida"), // // APAGAR_MENSAGEM("Mensagens movidas para pasta Lixeira"); // private String value; // // private Mensagem(String value) { // this.value = value; // } // // public String getValue() { // return value; // } // // }; // // public enum Campo { // ADICIONAR_ANEXO("link=exact:Anexos: adicionar+"), // // ANEXO_1("inputFile_1_1"), // // ANEXO_2("inputFile_1_2"), // // NOVA_MENSAGEM( // "//table[@id='folders_tbl']/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span"), // // // PARA_1("to_1"), // // ASSUNTO_1("subject_1"), // // ENVIAR_EMAIL_1("send_button_1"), // // CHECKBOX_EMAIL( // "//div[@id='exmail_main_body']/div[@id='content_id_0']/div[@id='divScrollMain_0']/table[@id='table_box']/tbody[@id='tbody_box']/tr[1]/td[1]/input[1]"), // // // CONFIRMACAO_LEITURA("return_receipt_1"), // // IMPORTANTE( // "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[3]"), // // // NORMAL( // "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[3]"), // // // NAO_LIDO( // "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[2]"), // // // IMPORTANTE_CHECKBOX("important_message_1"), // // COPIA_1("a_cc_link_1"), // // SALVAR("save_message_options_1"), // // COPIA_CAMPO_1("cc_1"), // // COPIA_OCULTA_1("a_cco_link_1"), // // COPIA_OCULTA_CAMPO_1("cco_1"), // // PASTA_LIXEIRA("lINBOX/Trashtree_folders"), // // PASTA_ENVIADOS("lINBOX/Senttree_folders"), // // LIMPAR_LIXEIRA("empty_trash"), // // SELECIONAR_TODOS_EMAILS("chk_box_select_all_messages"), // // ENCAMINHAR_EMAIL( // "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[3]/span[3]"), // // // RESPONDER_EMAIL( // "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[3]/span[5]"), // // // MOVER_EMAIL("//span[@onclick='wfolders.makeWindow(\"\",\"move_to\")']"), // // // MSG_INFO("msg_info"), // // MENSAGEM("em_div_write_msg"); // private String value; // // private Campo(String value) { // this.value = value; // } // // public String getValue() { // return value; // } // // }; // // public enum Valor { // EMAIL_TESTE_1("luiz-fernando.estivalet@cte.serpro.gov.br"), // // EMAIL_TESTE_2("luiz.f.estivalet@gmail.com"), // // EMAIL_TESTE_3("luizfernando_estivalet@yahoo.com"), // // EMAIL_INVALIDO("bla"), // // EMAIL_TESTE_MULTIPLOS( // "luiz-fernando.estivalet@cte.serpro.gov.br, luizfernando_estivalet@yahoo.com"), // // // ANEXO_1("/home/luiz/Desktop/arquivo.txt"), // // ANEXO_2("/home/luiz/Desktop/arquivo2.txt"), // // ASSUNTO("[SELENIUM] Teste envio mensagem"), // // ASSUNTO_SALVAR("[SELENIUM] Teste salvar mensagem"), // // ASSUNTO_EMAIL_INVALIDO( // "[SELENIUM] Teste envio mensagem com destinatário inválido"), // // ASSUNTO_SEM_DESTINATARIO( // "[SELENIUM] Teste envio mensagem sem destinatário"), // // ASSUNTO_MULTIPLOS_DESTINATARIOS( // "[SELENIUM] Teste múltiplos destinatários"), // // ASSUNTO_ANEXO("[SELENIUM] Teste envio mensagem com anexo"), // // ASSUNTO_IMPORTANTE("[SELENIUM] Teste envio mensagem importante"), // // ASSUNTO_MULTIPLOS_ANEXOS("[SELENIUM] Teste com múltiplos anexos"), // // ASSUNTO_CONFIRMACAO_LEITURA( // "[SELENIUM] Teste com confirmação de leitura"), // // ASSUNTO_COPIA("[SELENIUM] Teste envio mensagem com cópia"), // // ASSUNTO_COPIA_OCULTA("[SELENIUM] Teste envio mensagem com cópia oculta"), // ASSUNTO_SOMENTE_COPIA( // "[SELENIUM] Teste envio mensagem somente cópia"), // // ASSUNTO_SOMENTE_COPIA_OCULTA( // "[SELENIUM] Teste mensagem somente cópia oculta"), // // TEXTO_EMAIL( // "

Email enviado a partir do Selenium!

Favor ignorar!

"), // // TEXTO_EMAIL_CONFIRMACAO_LEITURA( // "

Email enviado a partir do Selenium!

Teste de confirmação de leitura

Favor ignorar!

"), // // // TEXTO_EMAIL_COPIA_OCULTA( // "

Email enviado a partir do Selenium!

Teste de cópia oculta

Favor ignorar!

"), // // // TEXTO_EMAIL_COPIA( // "

Email enviado a partir do Selenium!

Teste de cópia

Favor ignorar!

"), // // // TEXTO_EMAIL_IMPORTANTE( // "

Email enviado a partir do Selenium!

Teste de email importante

Favor ignorar!

"), // // // TEXTO_EMAIL_MULTIPLOS_ANEXOS( // "

Email enviado a partir do Selenium!

Teste de email com múltiplos anexos

Favor ignorar!

"), // // // TEXTO_EMAIL_MULTIPLOS_DESTINATARIOS( // "

Email enviado a partir do Selenium!

Teste de email com múltiplos destinatários

Favor ignorar!

"), // // // TEXTO_EMAIL_SEM_ASSUNTO( // "

Email enviado a partir do Selenium!

Teste de email sem assunto

Favor ignorar!

"), // // // TEXTO_EMAIL_SALVO( // "

Email enviado a partir do Selenium!

Teste para salvar um email na pasta rascunhos

Favor ignorar!

"), // // // TEXTO_EMAIL_ANEXO( // "

Email enviado a partir do Selenium!

Teste de anexo

Favor ignorar!

"); // private String value; // // private Valor(String value) { // this.value = value; // } // // public String getValue() { // return value; // } // // }; }