org.openlmis.pageobjects.RequisitionPage.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.pageobjects.RequisitionPage.java

Source

/*
 * 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();
    }
}