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