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("divScrollMain_0"); } /** * 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; } /** * Cria um novo email informando destinatario e assunto. * * @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(Campo.PARA_1.getValue(), to); selenium.type(Campo.ASSUNTO_1.getValue(), subject); } /** * Cria um novo email. * * @throws Exception */ public void composeEmail() throws Exception { this.enterExpressoMail(); selenium.click(Campo.NOVA_MENSAGEM.getValue()); super.waitForElement(Campo.PARA_1.getValue()); } /** * @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, boolean remove) throws Exception { this.composeEmail(to, subject); selenium.click(Campo.ENVIAR_EMAIL_1.getValue()); this.assertMessage(Campo.MENSAGEM.value, Mensagem.EMAIL_ENVIADO.value); if (remove) { this.removeEmail(subject); } } /** * Pressiona opcao para enviar o email. */ public void sendEmail() { selenium.click(Campo.ENVIAR_EMAIL_1.getValue()); } /** * 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("//div[@id='exmail_main_body']/table[1]/tbody[@id='border_tbody']/tr[1]/td[2]/table/tbody/tr/td[1]"); // 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("//div[@id='footer_menu']/table[@id='footer_box']/tbody/tr[@id='table_message']/td[@id='span_options']/span[1]/span"); this.assertMessage(Campo.MENSAGEM.getValue(), Mensagem.APAGAR_UMA_MENSAGEM.getValue()); } /** * 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(Campo.CHECKBOX_EMAIL.getValue()); this.deleteEmail(subject); this.waitForElement(Campo.MSG_INFO.getValue()); assertTrue(Mensagem.PASTA_VAZIA.getValue().equals( selenium.getText(Campo.MSG_INFO.getValue()))); } /** * 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(Campo.PASTA_ENVIADOS.getValue(), subject); // Limpa a lixeira. super.logout(); this.enterExpressoMail(); this.cleanupTrash(); } /** * Limpa a lixeira. * * @throws Exception */ public void cleanupTrash() throws Exception { this.openFolder(Campo.PASTA_LIXEIRA.getValue()); selenium.click(Campo.LIMPAR_LIXEIRA.getValue()); assertTrue(selenium.getConfirmation().matches( Mensagem.LIMPAR_LIXEIRA.getValue())); super.waitForElement(Campo.MENSAGEM.getValue()); assertEquals(Mensagem.LIXEIRA_LIMPA.getValue(), selenium.getText(Campo.MENSAGEM.getValue())); // 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("//div[@id='exmail_main_body']/table[@id='border_table']/tbody[@id='border_tbody']/tr[@id='border_tr']/td[@id='border_id_0']/font/span[@id='tot_m']")); } /** * @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("//div[@id='divScrollMain_0']/table[@id='table_box']/tbody[@id='tbody_box']/tr[" + i + "]/td[1]/input[1]@id"); 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("//div[@id='exmail_main_body']/div[@id='content_id_0']/div[@id='divScrollMain_0']/table[@id='table_box']/tbody[@id='tbody_box']/tr[@id='" + emailId + "']/td[5]/img"); } /** * @param emailId * Id do email. * @return true se email lido, false caso * contrario. */ public boolean isRead(String emailId) { return "Lida" .equals(selenium .getAttribute("//div[@id='exmail_main_body']/div[@id='content_id_0']/div[@id='divScrollMain_0']/table[@id='table_box']/tbody[@id='tbody_box']/tr[@id='" + emailId + "']/td[7]/img@title")); } /** * 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("divScrollMain_0"); } /** * 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(Campo.RESPONDER_EMAIL.getValue()); 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("msg_opt_reply_options" + id + "_r"); selenium.click("//span[@onclick='new_message(\"reply_to_all_with_history\",\"" + id.substring(1) + "_r\");']"); 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("msg_opt_reply_options" + id + "_r"); selenium.click("//span[@onclick='new_message(\"reply_without_history\",\"" + id.substring(1) + "_r\");']"); 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("//span[@onclick='new_message(\"reply_without_history\",\"" + id.substring(1) + "_r\");']"); 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("to" + id); selenium.click("send_button" + 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(Campo.ENCAMINHAR_EMAIL.getValue()); // Espera carregar aba para encaminhar email. super.waitForElement("to" + id); selenium.type("to" + id, to); selenium.click("send_button" + 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"); private String value; private Valor(String value) { this.value = value; } public String getValue() { return value; } }; }