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));
}
}