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.responder.sem.historico", id)); 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)); } }