package org.expressolivre.cte.pages.email; import org.apache.commons.lang.StringUtils; import org.expressolivre.cte.pages.common.Page; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.RenderedWebElement; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; /** * @author L.F.Estivalet (Serpro) * * Created on Dec 16, 2010 at 9:43:21 AM * */ public class MailPage extends Page { /** Botao para criar novo email. */ @FindBy(xpath = "//table[@id='folders_tbl']/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span") private WebElement newEmail; /** Campo "Para:". */ @FindBy(id = "to_1") private WebElement to; /** Campo "Assunto:". */ @FindBy(id = "subject_1") private WebElement subject; /** Botao para enviar email. */ @FindBy(id = "send_button_1") private WebElement send; /** Flag de importante no momento de compor um email. */ @FindBy(id = "important_message_1") private WebElement important; /** Flag de importante de um email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[3]") private WebElement importantFlag; /** Filtra emails importantes. */ @FindBy(id = "span_flag_FLAGGED") private WebElement importantFilter; /** Filtra emails lidos. */ @FindBy(id = "span_flag_SEEN") private WebElement readFilter; @FindBy(id = "span_flag_UNSEEN") private WebElement notReadFilter; @FindBy(id = "span_flag_ANSWERED") private WebElement answeredFilter; /** Flag normal de um email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[3]") private WebElement normalFlag; /** Flag nao lido de um email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[2]") private WebElement notReadFlag; /** Checkbox de confirmacao de leitura. */ @FindBy(id = "return_receipt_1") private WebElement returnReceipt; /** Link para acionar exibicao do campo copia oculta Cco. */ @FindBy(id = "a_cco_link_1") private WebElement blindCarbonCopyLink; /** Campo copia oculta "Cco:". */ @FindBy(id = "cco_1") private WebElement blindCarbonCopy; /** Link para acionar exibicao do campo copia Cc. */ @FindBy(id = "a_cc_link_1") private WebElement carbonCopyLink; /** Campo copia "Cc:". */ @FindBy(id = "cc_1") private WebElement carbonCopy; /** Link para salvar email. */ @FindBy(id = "save_message_options_1") private WebElement saveEmail; /** Link para adicionar anexos ao email. */ @FindBy(linkText = "Anexos: adicionar+") private WebElement attachmentLink; /** Link para adicionar 1o anexo. */ @FindBy(id = "inputFile_1_1") private WebElement attachment; /** Link para adicionar 2o anexo. */ @FindBy(id = "inputFile_1_2") private WebElement attachment2; /** Link para remover anexo. */ @FindBy(id = "linkFile_1_1") private WebElement removeAttachmentLink; /** Link para apagar email quando este estiver aberto. */ @FindBy(xpath = "//div[@id='footer_menu']/table[@id='footer_box']/tbody/tr[@id='table_message']/td[@id='span_options']/span[1]/span") private WebElement deleteEmailLink; @FindBy(xpath = "//div[@id='footer_menu']/table[@id='footer_box']/tbody/tr[@id='table_message']/td[@id='span_options']/span[4]/span") private WebElement exportEmailLink; /** Link para pasta lixeira. */ @FindBy(id = "lINBOX/Trashtree_folders") private WebElement trashFolder; /** Link para limpar lixeira. */ @FindBy(id = "empty_trash") private WebElement emptyTrashLink; @FindBy(id = "divScrollMain_0") private WebElement emailsListDiv; /** Campo contendo total de emails de uma pasta. */ @FindBy(id = "tot_m") private WebElement totalEmails; @FindBy(xpath = "//div[@id='exmail_main_body']/table[1]/tbody[@id='border_tbody']/tr[1]/td[2]/table/tbody/tr/td[1]") private WebElement emailTab; /** Checkbox para selecao de todos emails de uma pasta. */ @FindBy(id = "chk_box_select_all_messages") private WebElement selectAllEmails; /** Link para acionar o menu Ferramentas. */ @FindBy(xpath = "//td[@id='link_tools']/div/span") private WebElement toolsMenu; @FindBy(xpath = "//div[@id='menu_tools']/table/tbody/tr[4]/td") private WebElement editFolder; @FindBy(xpath = "//div[@id='menu_tools']/table/tbody/tr[3]/td") private WebElement editFilter; @FindBy(xpath = "//div[@id='window_ffilter_ccform']/div[@id='form_body']/a[1]") private WebElement filterNewRule; @FindBy(xpath = "//div[@id='window_ffilter_ccform']/div[@id='form_body']/span[2]/input") private WebElement filterSaveRules; @FindBy(id = "field1") private WebElement filterRecepient; @FindBy(id = "field2") private WebElement filterTo; @FindBy(id = "field3") private WebElement filterSubject; @FindBy(id = "radio1") private WebElement filterArchieveIn; @FindBy(id = "select_mailboxes") private WebElement filterMailBoxes; @FindBy(id = "radio2") private WebElement filterForwardMessage; @FindBy(id = "radio3") private WebElement filterRejectMessage; @FindBy(id = "radio4") private WebElement filterDeleteMessage; @FindBy(id = "radio5") private WebElement filterApplyImportantFilter; @FindBy(xpath = "//input[@value='Nova Pasta']") private WebElement createNewFolder; @FindBy(xpath = "//input[@value='Excluir pasta']") private WebElement deleteFolder; @FindBy(xpath = "//input[@value='Renomear pasta']") private WebElement renameFolder; @FindBy(xpath = "//span[@onclick='wfolders.makeWindow(\"\",\"move_to\")']") /** Opcao de mover do rodape. */ private WebElement moveEmailLink; @FindBy(id = "dJSWin_wfolders_bok") private WebElement moveEmailButton; /** Link para encaminhar em email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[3]/span[3]") private WebElement forwardEmail; /** Link para responder em email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[3]/span[5]") private WebElement replyEmail; /** Link para responder a todos em email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span[1]") private WebElement replyAllEmail; /** Link para responder sem historico em email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span[2]") private WebElement replyEmailWithoutHistory; /** Link para responder a todos sem historico em email aberto. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span[3]") private WebElement replyAllEmailWithoutHistory; /** Link para editar email na pasta de rascunhos. */ @FindBy(xpath = "//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr/td[2]/span[2]/span[1]") private WebElement editEmail; @FindBy(xpath = "//div[@id='lertContainer']/div[@id='lertWindow']/div[@id='lertButtons']/a[1]") private WebElement cancelNewEmail; @FindBy(xpath = "//div[@id='lertContainer']/div[@id='lertWindow']/div[@id='lertButtons']/a[2]") private WebElement discardNewEmail; /** * Esse botao eh no alerta ao fechar uma mensagem nao salva e nao o botao * salvar para rascunhos. */ @FindBy(xpath = "//div[@id='lertContainer']/div[@id='lertWindow']/div[@id='lertButtons']/a[3]") private WebElement saveNewEmail; @FindBy(xpath = "//table[@id='folders_tbl']/tbody/tr[1]/td/table/tbody/tr[1]/td/a[1]") private WebElement searchMessages; @FindBy(id = "txt_de") private WebElement searchRemetente; @FindBy(id = "txt_para") private WebElement searchTo; @FindBy(id = "txt_cc") private WebElement searchCopy; @FindBy(id = "txt_ass") private WebElement searchSubject; @FindBy(id = "txt_body") private WebElement searchBody; @FindBy(id = "since_date") private WebElement searchSinceDate; @FindBy(id = "before_date") private WebElement searchBeforeDate; @FindBy(id = "on_date") private WebElement searchOnDate; @FindBy(id = "flagged") private WebElement searchImportantFilter; @FindBy(id = "seen") private WebElement searchSeenFilter; @FindBy(id = "answered") private WebElement searchAnsweredFilter; @FindBy(id = "recent") private WebElement searchRecentFilter; @FindBy(id = "incluir") private WebElement includeFolderForSearch; @FindBy(xpath = "//div[@id='window_search']/div[@id='div_button_search']/table/tbody/tr/td[1]/input") private WebElement searchButton; @FindBy(xpath = "//div[@id='window_search']/div[@id='div_button_search']/table/tbody/tr/td[3]/input") private WebElement closeSearchButton; /** Nome da pasta "Caixa de Entrada". */ public static final String INBOX_FOLDER = "lINBOXtree_folders"; /** Nome da pasta "Enviados". */ public static final String SENT_FOLDER = "lINBOX/Senttree_folders"; /** * @param driver */ public MailPage(WebDriver driver) { super(driver); } /** * Cria um novo email. */ public void createNewEmail() { this.newEmail.click(); waitForElement(By.id("to_1")); } /** * Cancela criacao de novo email. */ public void cancelNewEmail() { this.cancelNewEmail.click(); } public void setSearchRemetente(String searchRemetente) { this.searchRemetente.sendKeys(searchRemetente); } public void setSearchTo(String searchTo) { this.searchTo.sendKeys(searchTo); } public void setSearchCopy(String searchCopy) { this.searchCopy.sendKeys(searchCopy); } public void setSearchSubject(String searchSubject) { this.searchSubject.sendKeys(searchSubject); } public void setSearchBody(String searchBody) { this.searchBody.sendKeys(searchBody); } public void setSearchSinceDate(String searchSinceDate) { this.searchSinceDate.sendKeys(searchSinceDate); } public void setSearchBeforeDate(String searchBeforeDate) { this.searchBeforeDate.sendKeys(searchBeforeDate); } public void setSearchOnDate(String searchOnDate) { this.searchOnDate.sendKeys(searchOnDate); } public void setSearchSeenFilter(String searchSeenFilter) { super.setComboValue(this.searchSeenFilter, searchSeenFilter); } public void setSearchAnsweredFilter(String searchAnsweredFilter) { super.setComboValue(this.searchAnsweredFilter, searchAnsweredFilter); } public void setSearchRecentFilter(String searchRecentFilter) { super.setComboValue(this.searchRecentFilter, searchRecentFilter); } public void openSearchMessageWindow() { this.searchMessages.click(); super.waitForElement(By.id("flagged")); } /** * Pesquisa apenas mensagens importantes. * * @param flag */ public void searchImportantMessage(String flag) { super.setComboValue(searchImportantFilter, flag); } /** * Pesquisa apenas mensagens lidas. * * @param flag */ public void searchSeenMessage(String flag) { super.setComboValue(searchSeenFilter, flag); } /** * Escolhe pastas a serem pesquisadas. * * @param folder */ public void setSearchFolders(String folder) { super.clickElement(By.id(folder)); includeFolderForSearch.click(); } public void doSearch() { searchButton.click(); } public void closeSearchWindow() { closeSearchButton.click(); } /** * Descarta criacao de novo email. */ public void discardNewEmail() { this.discardNewEmail.click(); } /** * Salva email na pasta rascunhos. */ public void saveNewEmail() { this.saveNewEmail.click(); } /** * Preenche campo assunto. * * @param subject * Assunto a ser preenchido. */ public void setSubject(String subject) { this.subject.sendKeys(subject != null ? subject : ""); } /** * Preenche corpo (texto) do email. * * @param body * Texto a ser preenchido. */ public void setBody(String body) { // Foi o unico jeito que consegui pegar o richtexteditor... if (body != null) { // Troca CR&|LF por
body = body.replaceAll("(\r\n|\r|\n|\n\r)", "
"); ((JavascriptExecutor) driver) .executeScript("document.getElementById('body_1').contentWindow.document.body.innerHTML='" + body + "';"); } } /** * @param to * @param subject * @param body */ public void composeEmail(String to, String subject, String body) { this.createNewEmail(); this.to.sendKeys(to); this.setSubject(subject); this.setBody(body); } public String readEmail(String subject) { // waitForElementByXpath("//div[@id='exmail_main_body']/table[1]/tbody[@id='border_tbody']/tr[1]/td[2]/table/tbody/tr/td[1]"); String id = findEmailIdBySubject(subject); id = id.substring(id.lastIndexOf("_") + 1); clickElement(By.id("td_who_" + id)); super.waitForElement(By.id("div_message_scroll_" + id + "_r")); return id; } public void editEmail() { super.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr/td[2]/span[2]/span[1]")); // div[@id='exmail_main_body']/div[@id='content_id_9_r']/table/tbody/tr[1]/td/table/tbody/tr/td[2]/span[1] this.editEmail.click(); } public void editEmail(String id) { super.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr/td[2]/span[2]/span[1]")); // div[@id='exmail_main_body']/div[@id='content_id_9_r']/table/tbody/tr[1]/td/table/tbody/tr/td[2]/span[1] this.editEmail.click(); waitForElement(By.id("content_id_" + id)); } /** * Encaminha uma mensagem. * * @param id * Id da mensagem a ser encaminhada * @param to * Destinatario */ public void forwardEmail(String id, String to) { super.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[3]/span[3]")); this.forwardEmail.click(); super.waitForElement(By.id("to_" + id)); driver.findElement(By.id("to_" + id)).sendKeys(to); driver.findElement(By.id("send_button_" + id)).click(); } /** * Mostra detalhes (cabecalho do email sendo lido). * * @param id */ public void showDetails(String id) { driver.findElement(By.id("option_hide_more_" + id + "_r")).click(); } /** * Remove anexos do email sendo lido. */ public void removeAllAttachments() { driver.findElement( By.xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[2]/td/div[1]/table[1]/tbody/tr[5]/td[2]/a[1]")) .click(); Alert alert = driver.switchTo().alert(); assert ("ATENÇÃO: Após a confirmação dessa mensagem, TODOS os anexos da mesma serão apagados. Tenha certeza de que possui uma cópia dos arquivos importantes. Deseja confirmar a operação?" .equals(alert.getText())); alert.accept(); } public void blockRecipient(String message) { driver.findElement( By.xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[2]/td/div[1]/table[1]/tbody/tr[1]/td[1]/span[@id='tt_d']/img")) .click(); // Espera pelo "Carregando..." aparecer. waitForElement(By.id("divProgressBar")); waitForElement(By.id("divScrollMain_0")); // Espera pelo "Carregando..." desaparecer. isNotDisplayed(this .waitFindElement(By.id("divProgressBar"), 5000, 1000)); Alert alert = driver.switchTo().alert(); assert (message.equals(alert.getText())); alert.accept(); } private void reply(String id) { super.waitForElement(By.id("to_" + id)); driver.findElement(By.id("send_button_" + id)).click(); } /** * Responde uma mensagem. * * @param id * Id da mensagem a ser respondida */ public void replyEmail(String id) { super.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[3]/span[5]")); this.replyEmail.click(); this.reply(id); } /** * Responde uma mensagem. * * @param id * Id da mensagem a ser respondida */ public void replyAllEmailWithoutHistory(String id) { super.findAndClickElement("msg_opt_reply_options_" + id + "_r"); super.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span[3]")); this.replyAllEmailWithoutHistory.click(); this.reply(id); } /** * Responde uma mensagem. * * @param id * Id da mensagem a ser respondida */ public void replyEmailWithoutHistory(String id) { super.findAndClickElement("msg_opt_reply_options_" + id + "_r"); super.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span[2]")); this.replyEmailWithoutHistory.click(); this.reply(id); } /** * Responde uma mensagem. * * @param id * Id da mensagem a ser respondida */ public void replyAllEmail(String id) { super.findAndClickElement("msg_opt_reply_options_" + id + "_r"); super.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td/div/span[1]")); this.replyAllEmail.click(); this.reply(id); } /** * Abre uma pasta de email especifica. * * @param folder * Pasta de email a ser aberta. */ public void openFolder(String folder, boolean waitEmail) { waitForElement(By.id(folder)); clickElement(By.id(folder)); // Espera pelo "Carregando..." aparecer. waitForElement(By.id("divProgressBar")); waitForElement(By.id("divScrollMain_0")); // Espera pelo "Carregando..." desaparecer. isNotDisplayed(this .waitFindElement(By.id("divProgressBar"), 5000, 1000)); if (waitEmail) { waitForElement(By .xpath("//div[@id='divScrollMain_0']/table[@id='table_box']/tbody[@id='tbody_box']/tr[1]/td[1]/input[1]")); } } public void openFolder(String folder) { openFolder(folder, true); } /** * Abre uma pasta de email especifica. * * @param folder * Pasta de email a ser aberta. */ public void openFolder(WebElement folder) { folder.click(); waitForElement(By.id("divScrollMain_0")); } /** * Filtra somente as mensagens importantes. */ public void setImportantFilter() { this.importantFilter.click(); } /** * Filtra somente as mensagens lidas. */ public void setReadFilter() { this.readFilter.click(); } /** * Filtra somente as mensagens nao lidas. */ public void setNotReadFilter() { this.notReadFilter.click(); } /** * Filtra somente as mensagens respondidas. */ public void setAnsweredFilter() { this.answeredFilter.click(); } /** * Limpa a lixeira. */ public void cleanupTrash() { this.openFolder(this.trashFolder); this.emptyTrashLink.click(); } /** * @return Numero de emails na pasta selecionada. */ public int getTotalEmails() { return Integer.valueOf(this.totalEmails.getText()); } /** * Move email para um pasta no servidor. * * @param folderName * Nome da pasta pre-existente no servidor. */ public void moveEmail(String folderName) { this.moveEmailLink.click(); super.findAndClickElement("lINBOX/" + folderName + "wfolders_tree"); this.moveEmailButton.click(); } /** * Edita nome de pasta. */ public void editFolder() { this.toolsMenu.click(); this.waitForElement(By .xpath("//div[@id='menu_tools']/table/tbody/tr[4]/td")); this.editFolder.click(); } public void newFilterRule() { this.filterNewRule.click(); } public void setFilterRecepient(String value) { this.filterRecepient.sendKeys(value); } public void setFilterTo(String value) { this.filterTo.sendKeys(value); } public void setFilterSubject(String value) { this.filterSubject.sendKeys(value); } public void setFilterArchieveIn() { this.filterArchieveIn.click(); } public void setFilterMailBox(String mailBox) { super.setComboValue(this.filterMailBoxes, mailBox); } public void saveFilterRules() { this.filterSaveRules.click(); } /** * Edita filtros. */ public void editFilter() { this.toolsMenu.click(); this.waitForElement(By .xpath("//div[@id='menu_tools']/table/tbody/tr[3]/td")); this.editFilter.click(); this.waitForElement(By.id("set_rules_img")); } /** * Apaga uma regra do filtro. * * @param id */ public void deleteRule(int id) { this.waitForElement(By.id("rule_" + id)); driver.findElement(By.id("rule_" + id)).click(); driver.findElement(By.xpath("//div[@id='form_buttons']/input[3]")) .click(); driver.findElement(By.xpath("//div[@id='form_buttons']/input[4]")) .click(); } /** * Cria nova pasta. * * @param folderName * Nome da pasta a ser criada. */ public void createNewFolder(String folderName) { this.editFolder(); this.createFolder(folderName); } private void createFolder(String folderName) { this.createNewFolder.click(); Alert newFolder = driver.switchTo().alert(); assert "Insira o nome da nova pasta: ".equals(newFolder.getText()); newFolder.sendKeys(folderName); newFolder.accept(); } /** * Cria sub pasta. * * @param rootFolderName * Pasta pai. * @param subFolderName * Nome da sub pasta a ser criada. */ public void createSubFolder(String rootFolderName, String subFolderName) { this.editFolder(); this.driver.findElement( By.id("lINBOX/" + rootFolderName + "folders_tree")).click(); this.createFolder(subFolderName); } /** * Renomeia pasta. * * @param folderName * Nome da pasta a ser renomeada. * @param newName * Novo nome da pasta. */ public void renameFolder(String folderName, String newName) { this.editFolder(); this.driver.findElement(By.id("lINBOX/" + folderName + "folders_tree")) .click(); this.renameFolder.click(); Alert newFolder = driver.switchTo().alert(); assert "Entre com um nome para a pasta:".equals(newFolder.getText()); newFolder.sendKeys(newName); newFolder.accept(); } /** * @param folderName */ public void renameFolderInUse(String folderName) { this.editFolder(); this.driver.findElement(By.id("lINBOX/" + folderName + "folders_tree")) .click(); this.renameFolder.click(); Alert newFolder = driver.switchTo().alert(); assert "Não é possível renomear esta pasta, pois está em uso no momento!" .equals(newFolder.getText()); newFolder.accept(); } /** * Exclui pasta. * * @param folderName * Nome da pasta a ser excluida. */ public void deleteFolder(String folderName) { this.editFolder(); this.driver.findElement(By.id("lINBOX/" + folderName + "folders_tree")) .click(); this.deleteFolder.click(); } /** * Exclui pasta. * * @param folderName * Nome da pasta a ser excluida. */ public void deleteFolder(String folderName, boolean inUse) { this.editFolder(); this.driver.findElement(By.id("lINBOX/" + folderName + "folders_tree")) .click(); this.deleteFolder.click(); Alert confirm = driver.switchTo().alert(); if (!inUse) { assert ("Você gostaria de excluir a pasta: " + folderName + "?") .equals(confirm.getText()); } else { assert ("Não é possível remover esta pasta, pois está em uso no momento!") .equals(confirm.getText()); } confirm.accept(); } /** * Exclui pasta. * * @param folderName * Nome da pasta a ser excluida. */ public void deleteSubFolder(String rootFolderName, String subFolderName) { this.editFolder(); this.driver.findElement( By.id("pINBOX/" + rootFolderName + "folders_tree")).click(); this.driver.findElement( By.id("lINBOX/" + rootFolderName + "/" + subFolderName + "folders_tree")).click(); this.deleteFolder.click(); Alert confirm = driver.switchTo().alert(); assert ("Você gostaria de excluir a pasta: " + subFolderName + "?") .equals(confirm.getText()); confirm.accept(); } /** * Marca email sendo composto como importante. */ public void checkImportantFlag() { this.important.click(); } /** * Marca email como importante apos ler. */ public void setImportantFlag() { this.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[3]")); this.importantFlag.click(); } /** * Marca email como normal apos ler. */ public void setNormalFlag() { this.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[3]")); this.normalFlag.click(); } /** * Marca email como nao lido apos ler. */ public void setNotReadFlag() { this.waitForElement(By .xpath("//div[@id='exmail_main_body']/div[2]/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span[2]")); this.notReadFlag.click(); } /** * Marca solicitacao de confirmacao de leitura do email sendo composto. */ public void checkReturnReceipt() { this.returnReceipt.click(); } /** * Salva email sendo composto (devera ir para a pasta de Rascunhos). * * TODO adicionar teste para verificar se o email realmente esta presente na * pasta Rascunhos?? */ public void saveEmail() { this.saveEmail.click(); } /** * Apaga email previamente selecionado. */ public void deleteEmail() { this.deleteEmailLink.click(); } /** * Exporta email previamente selecionado. */ public void exportEmail() { this.exportEmailLink.click(); } /** * Seleciona todos emails da pasta corrente. */ public void selectAllEmails() { this.selectAllEmails.click(); } /** * Adiciona email no campo de copia oculta. * * @param email * Email a ser adicionado. */ public void setBlindCarbonCopy(String email) { this.blindCarbonCopyLink.click(); this.blindCarbonCopy.sendKeys(email); } /** * Adiciona email no campo de copia. * * @param email * Email a ser adicionado. */ public void setCarbonCopy(String email) { this.carbonCopyLink.click(); this.carbonCopy.sendKeys(email); } /** * Anexo um arquivo no email sendo composto. * * @param attachment * Caminho para o arquivo a ser anexado. */ public void addAttachment(String attachment) { this.attachmentLink.click(); this.attachment.sendKeys(attachment); } /** * Remove anexo do email sendo composto. */ public void removeAttachment() { this.removeAttachmentLink.click(); } public void addAttachment2(String attachment) { this.attachmentLink.click(); this.attachment2.sendKeys(attachment); } /** * Envia email sendo composto. */ public void sendMail() { this.send.click(); } /** * Fecha aba do email sendo composto e confirma que email nao esta salvo. */ public void closeMail() { this.closeMail(true); } /** * @param discardEmail */ public void closeMail(boolean discardEmail) { // Na versao Serpro: // td[@id='border_id_1']/table/tbody/tr/td[2]/img // Na versao Comunidade: // td[@id='border_id_1']/div/div[2]/img // Resolvi usando o xpath abaixo: super.clickElement(By.xpath("//td[@id='border_id_1']//img")); // if (checkAlert) { // Alert closeAlert = driver.switchTo().alert(); // closeAlert.accept(); // } // Clica em descartar. if (discardEmail) { super.clickElement(By .xpath("//div[@id='lertWindow']/div[@id='lertButtons']/a[2]")); } } public void closeMail(String id, boolean discardEmail) { super.clickElement(By.xpath("//td[@id='border_id_" + id + "']//img")); // Clica em cancelar if (discardEmail) { super.clickElement(By .xpath("//div[@id='lertWindow']/div[@id='lertButtons']/a[2]")); } } /** * Envia email. * * @param id * Id do email a ser enviado. */ public void sendMail(String id) { super.findAndClickElement("send_button_" + id); } /** * @param to * @param subject */ public void composeEmail(String to, String subject) { composeEmail(to, subject, null); } /** * @param to */ public void composeEmail(String to) { composeEmail(to, null, null); } /** * Procura um email pelo assunto. * * @param subject * Assunto a ser procurado. * @param select * Se email encontrado, deseja seleciona-lo? * @return "id" do email se encontrar, null se nao encontrar. */ public String findEmailIdBySuject(String subject, boolean select) { // System.out.println("searching for --------->" + subject); String html = driver.getPageSource(); // System.out.println(html.indexOf(subject)); // System.out.println(html); if (html.indexOf(subject) >= 0) { 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); // System.out.println(id); if (select) { // Marca checkbox correspondente ao id da mensagem. clickElement(By.id("check_box" + id.substring(1))); } return id; } System.out.println("email not found"); return null; } /** * @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 = driver .findElement( By.xpath("//div[@id='divScrollMain_0']/table[@id='table_box']/tbody[@id='tbody_box']/tr[" + i + "]/td[1]/input[1]")).getAttribute( "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 super .isDisplayed((RenderedWebElement) driver.findElement(By .xpath("//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 super .isDisplayed((RenderedWebElement) driver.findElement(By .xpath("//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[@id='td_message_unseen_" + emailId + "']/img"))); } /** * @param emailId * Id do email. * @return true se email nao lido, false caso * contrario. */ public boolean isNotRead(String emailId) { return super .isDisplayed((RenderedWebElement) driver.findElement(By .xpath("//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[@id='td_message_unseen_" + emailId + "']/img"))); } /** * @param emailId * Id do email. * @return true se email respondido, false caso * contrario. */ public boolean isAnswered(String emailId) { return super .isDisplayed((RenderedWebElement) driver.findElement(By .xpath("//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[@id='td_message_answered_" + emailId + "']/img"))); } /** * Procura email baseado no assunto na pasta corrente. * * @param subject * Assunto a ser pesquisado. * @return Id do email encontrado. */ public String findEmailIdBySubject(String subject) { return findEmailIdBySuject(subject, false); } /** * Procura email baseado no assunto em uma pasta especifica. * * @param folder * Pasta de pesquisa. * @param subject * Assunto a ser pesquisado. * @return Id do email encontrado. */ public String findEmailIdBySubject(String folder, String subject) { this.openFolder(folder); return findEmailIdBySuject(subject, false); } /** * Verifica se mensagem informada corresponde ao exibido pelo Expresso na * div onde sao exibidas mensagens ao usuario. * * @param message * Mensagem a ser validada. */ public void assertMessage(String message) { assert message.equals(getDisplayedElementContent("em_div_write_msg")); } /** * @return the to */ public WebElement getTo(String id) { waitForElement(By.id("to_" + id)); // findAndClickElement("to_" + id); // return getDisplayedElementContent(id); return driver.findElement(By.id("to_" + id)); } /** * @return the subject */ public WebElement getSubject(String id) { waitForElement(By.id("subject_" + id)); return driver.findElement(By.id("subject_" + id)); } /** * @return the blindCarbonCopy */ public WebElement getBlindCarbonCopy(String id) { waitForElement(By.id("cco_" + id)); return driver.findElement(By.id("cco_" + id)); } /** * @return the carbonCopy */ public WebElement getCarbonCopy(String id) { waitForElement(By.id("cc_" + id)); return driver.findElement(By.id("cc_" + id)); } /** * @param id * Id do email. * @return Texto do email. */ public Object getBody(String id) { waitForElement(By.id("body_" + id)); return ((JavascriptExecutor) driver) .executeScript("return document.getElementById('body_" + id + "').contentWindow.document.body.innerHTML;"); } }