/* * This program is part of the OpenLMIS logistics management information system platform software. * Copyright © 2013 VillageReach * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. *   * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public License along with this program.  If not, see http://www.gnu.org/licenses.  For additional information contact info@OpenLMIS.org.  */ package org.openlmis.pageobjects; import org.openlmis.UiUtils.TestWebDriver; import org.openqa.selenium.*; import org.openqa.selenium.support.FindBy; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.thoughtworks.selenium.SeleneseTestBase.assertFalse; import static com.thoughtworks.selenium.SeleneseTestBase.assertTrue; import static com.thoughtworks.selenium.SeleneseTestNgHelper.assertEquals; import static org.openqa.selenium.support.How.ID; import static org.openqa.selenium.support.How.XPATH; public class RequisitionPage extends Page { @FindBy(how = ID, using = "comments") private static WebElement commentsButton = null; @FindBy(how = ID, using = "addComment") private static WebElement addCommentTextArea = null; @FindBy(how = ID, using = "addButton") private static WebElement addCommentButton = null; @FindBy(how = ID, using = "commentClose") private static WebElement commentCloseIcon = null; @FindBy(how = ID, using = "button_OK") private static WebElement okButton = null; @FindBy(how = ID, using = "total_0") private static WebElement total = null; @FindBy(how = ID, using = "beginningBalance_0") private static WebElement beginningBalance = null; @FindBy(how = ID, using = "quantityReceived_0") private static WebElement quantityReceived = null; @FindBy(how = ID, using = "nonFullSupplyTab") private static WebElement nonFullSupplyTab = null; @FindBy(how = ID, using = "fullSupplyTab") private static WebElement fullSupplyTab = null; @FindBy(how = ID, using = "regimenTab") private static WebElement regimenTab = null; @FindBy(how = ID, using = "cost_0") private static WebElement totalCost = null; @FindBy(how = XPATH, using = "//input[@value='Add']") private static WebElement addNonFullSupplyButtonScreen = null; @FindBy(how = ID, using = "regimenTable") private static WebElement regimenTable = null; @FindBy(how = XPATH, using = "//input[@value='Save']") private static WebElement SaveButton = null; @FindBy(how = XPATH, using = "//input[@value='Submit']") private static WebElement SubmitButton = null; @FindBy(how = XPATH, using = "//input[@value='Authorize']") private static WebElement AuthorizeButton = null; @FindBy(how = XPATH, using = "//div[@id='saveSuccessMsgDiv' and @openlmis-message='message']") private static WebElement saveSuccessMessage = null; @FindBy(how = ID, using = "saveFailMessage") private static WebElement errorMessage = null; @FindBy(how = XPATH, using = "//div[@id='submitSuccessMsgDiv' and @openlmis-message='submitMessage']") private static WebElement submitSuccessMessage = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[3]/ng-switch/span/span") private static WebElement patientsOnTreatmentTextField = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[4]/ng-switch/span/span") private static WebElement patientsToInitiateTreatmentTextField = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[5]/ng-switch/span/span") private static WebElement patientsStoppedTreatmentTextField = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[6]/ng-switch/span/span") private static WebElement remarksTextField = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[3]/ng-switch/span/input") private static WebElement patientsOnTreatmentInputField = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[4]/ng-switch/span/input") private static WebElement patientsToInitiateTreatmentInputField = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[5]/ng-switch/span/input") private static WebElement patientsStoppedTreatmentInputField = null; @FindBy(how = XPATH, using = "//table[@id='regimenTable']/tbody[1]/tr[2]/td[6]/ng-switch/span/input") private static WebElement remarksInputField = null; @FindBy(how = ID, using = "printButton") private static WebElement printButtonFullView = null; @FindBy(how = ID, using = "resizeViewButton") private static WebElement resizeViewButton = null; @FindBy(how = ID, using = "printButtonOnHeader") private static WebElement printButtonOnHeader = null; protected RequisitionPage(TestWebDriver driver) { super(driver); } public void addComments(String comments) { clickCommentsButton(); typeCommentsInCommentsTextArea(comments); clickAddCommentsButton(); closeCommentPopUp(); } public void verifyComment(String comments, String AddedBy, int commentNumber) { boolean isAddedBy; boolean isAddedOn; commentsButton.click(); WebElement comment = testWebDriver.getElementByXpath("//ul[@id='comments-list']/li[" + commentNumber + "]/span"); assertEquals(comment.getText(), comments); WebElement commentAddedBy = testWebDriver.getElementByXpath("//ul[@id='comments-list']/li[" + commentNumber + "]/div"); isAddedBy = commentAddedBy.getText().contains("By: " + AddedBy); assertTrue(isAddedBy); Date date = new Date(); SimpleDateFormat ft = new SimpleDateFormat("dd/MM/yyyy"); isAddedOn = commentAddedBy.getText().contains(ft.format(date)); assertTrue(isAddedOn); commentCloseIcon.click(); } public void closeCommentPopUp() { testWebDriver.waitForElementToAppear(commentCloseIcon); commentCloseIcon.click(); } public void typeCommentsInCommentsTextArea(String comments) { testWebDriver.waitForElementToAppear(addCommentTextArea); addCommentTextArea.sendKeys(comments); } public void clickCommentsButton() { testWebDriver.waitForElementToAppear(commentsButton); commentsButton.click(); } public void clickAddCommentsButton() { testWebDriver.waitForElementToAppear(addCommentButton); addCommentButton.click(); } public void verifyValueInCommentsTextArea(String textToVerify) { testWebDriver.waitForElementToAppear(addCommentTextArea); addCommentTextArea.click(); assertEquals(addCommentTextArea.getAttribute("value").trim(), textToVerify.trim()); } public void verifyCommentBoxNotPresent() { boolean commentBoxPresent = false; testWebDriver.waitForElementToAppear(commentsButton); commentsButton.click(); try { addCommentTextArea.click(); commentBoxPresent = true; } catch (ElementNotVisibleException e) { commentBoxPresent = false; } catch (NoSuchElementException e) { commentBoxPresent = false; } finally { assertFalse(commentBoxPresent); } } public void clickOk() { testWebDriver.waitForElementToAppear(okButton); okButton.click(); testWebDriver.sleep(500); } public void verifyTotalField() { testWebDriver.waitForElementToAppear(total); String totalValue = total.getText(); String beginningBalanceValue = testWebDriver.getAttribute(beginningBalance, "value"); String quantityReceivedValue = testWebDriver.getAttribute(quantityReceived, "value"); assertEquals(totalValue, String.valueOf(Integer.parseInt(beginningBalanceValue) + Integer.parseInt(quantityReceivedValue))); } public void verifyTotalFieldPostAuthorize() { testWebDriver.waitForElementToAppear(total); String totalValue = total.getText(); String beginningBalanceValue = beginningBalance.getText(); String quantityReceivedValue = quantityReceived.getText(); assertEquals(totalValue, String.valueOf(Integer.parseInt(beginningBalanceValue) + Integer.parseInt(quantityReceivedValue))); } public void clickFullSupplyTab() { testWebDriver.waitForElementToAppear(fullSupplyTab); fullSupplyTab.click(); testWebDriver.waitForElementToAppear(totalCost); } public void clickNonFullSupplyTab() { testWebDriver.waitForElementToAppear(nonFullSupplyTab); nonFullSupplyTab.click(); testWebDriver.waitForElementToAppear(addNonFullSupplyButtonScreen); } public void clickRegimenTab() { testWebDriver.waitForElementToAppear(regimenTab); regimenTab.click(); testWebDriver.waitForElementToAppear(regimenTable); } public boolean existRegimenTab() { return regimenTab.isDisplayed(); } public boolean existRegimenCode(String regimentCode, int row) { return testWebDriver.getElementByXpath("//table[@id='regimenTable']/tbody/tr[" + row + "]/td[1]/ng-switch/span/span").getText().equals(regimentCode); } public boolean existRegimenName(String regimentName, int row) { return testWebDriver.getElementByXpath("//table[@id='regimenTable']/tbody[1]/tr[" + row + "]/td[2]/ng-switch/span/span").getText().equals(regimentName); } public boolean existRegimenReportingField(int fieldNumberInTable, int row) { return testWebDriver.getElementByXpath("//table[@id='regimenTable']/tbody[1]/tr[" + row + "]/td[" + fieldNumberInTable + "]/ng-switch/span/input").isDisplayed(); } public void enterValuesOnRegimenScreen(int columnNumber, int row, String value) { Map<Integer, String> tableIdColumnMapper = new HashMap<>(); tableIdColumnMapper.put(3, "patientsOnTreatment"); tableIdColumnMapper.put(4, "patientsToInitiateTreatment"); tableIdColumnMapper.put(5, "patientsStoppedTreatment"); tableIdColumnMapper.put(6, "remarks"); WebElement element = testWebDriver.getElementById(tableIdColumnMapper.get(columnNumber) + "_" + (row - 1)); testWebDriver.waitForElementToAppear(element); sendKeys(element, value); element.sendKeys(Keys.TAB); } public String getPatientsOnTreatmentValue() { testWebDriver.waitForElementToAppear(patientsOnTreatmentTextField); return testWebDriver.getText(patientsOnTreatmentTextField); } public String getPatientsToInitiateTreatmentValue() { testWebDriver.waitForElementToAppear(patientsToInitiateTreatmentTextField); return testWebDriver.getText(patientsToInitiateTreatmentTextField); } public String getPatientsStoppedTreatmentValue() { testWebDriver.waitForElementToAppear(patientsStoppedTreatmentTextField); return testWebDriver.getText(patientsStoppedTreatmentTextField); } public String getRemarksValue() { testWebDriver.waitForElementToAppear(remarksTextField); return testWebDriver.getText(remarksTextField); } public String getPatientsOnTreatmentInputValue() { testWebDriver.waitForElementToAppear(patientsOnTreatmentInputField); return testWebDriver.getAttribute(patientsOnTreatmentInputField, "value"); } public String getPatientsToInitiateTreatmentInputValue() { testWebDriver.waitForElementToAppear(patientsToInitiateTreatmentInputField); return testWebDriver.getAttribute(patientsToInitiateTreatmentInputField, "value"); } public String getPatientsStoppedTreatmentInputValue() { testWebDriver.waitForElementToAppear(patientsStoppedTreatmentInputField); return testWebDriver.getAttribute(patientsStoppedTreatmentInputField, "value"); } public String getRemarksInputValue() { testWebDriver.waitForElementToAppear(remarksInputField); return testWebDriver.getAttribute(remarksInputField, "value"); } public void clickSaveButton() { testWebDriver.waitForElementToAppear(SaveButton); SaveButton.click(); testWebDriver.waitForElementToAppear(saveSuccessMessage); } public void clickSubmitButton() { testWebDriver.waitForElementToAppear(SubmitButton); SubmitButton.click(); } public void clickAuthorizeButton() { testWebDriver.waitForElementToAppear(AuthorizeButton); AuthorizeButton.click(); } public void verifySubmitSuccessMsg() { testWebDriver.waitForElementToAppear(submitSuccessMessage); assertTrue("RnR Submit Success message not displayed", submitSuccessMessage.isDisplayed()); } public void verifySaveSuccessMsg() { assertTrue("RnR Submit Success message not displayed", saveSuccessMessage.isDisplayed()); } public void verifyApproveErrorDiv() { testWebDriver.waitForElementToAppear(errorMessage); assertTrue("RnR Approved error message not displayed", errorMessage.isDisplayed()); } public int getRegimenTableRowCount() { WebElement table_element = testWebDriver.findElement(By.id("regimenTable")); List<WebElement> tr_collection = table_element.findElements(By.xpath("id('regimenTable')/tbody[1]/tr")); return tr_collection.size(); } public int getRegimenTableColumnCount() { WebElement table_element = testWebDriver.findElement(By.id("regimenTable")); List<WebElement> tr_collection = table_element.findElements(By.xpath("id('regimenTable')/tbody[1]/tr/td")); return tr_collection.size(); } public void verifySkippedProductsOnRnRScreen(int rowNumber) { testWebDriver.waitForAjax(); WebElement skipCheckBox = testWebDriver.getElementById("skip_" + (rowNumber - 1)); testWebDriver.waitForElementToAppear(skipCheckBox); assertTrue(skipCheckBox.isSelected()); skipCheckBox = testWebDriver.getElementById("skip_" + (rowNumber)); assertFalse(skipCheckBox.isSelected()); } public void clickPrintButton() { testWebDriver.waitForElementToAppear(printButtonOnHeader); printButtonOnHeader.click(); testWebDriver.sleep(1000); } public void clickFullViewPrintButton() { testWebDriver.waitForElementToAppear(printButtonFullView); printButtonFullView.click(); testWebDriver.sleep(1000); } public void clickResizeViewButton() { testWebDriver.waitForElementToAppear(resizeViewButton); resizeViewButton.click(); } }