/* * 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.Keys; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; import java.util.List; import static org.openqa.selenium.support.How.ID; public class ProgramProductISAPage extends Page { @FindBy(how = ID, using = "program") private static WebElement selectProgramSelectBox = null; @FindBy(how = ID, using = "productNameLabel") private static WebElement productNameColumn = null; @FindBy(how = ID, using = "searchProduct") private static WebElement searchProductTextBox = null; @FindBy(how = ID, using = "editButton0") private static WebElement editFormulaButton = null; @FindBy(how = ID, using = "who-ratio") private static WebElement ratioTextBox = null; @FindBy(how = ID, using = "doses-per-year") private static WebElement dosesPerYearTextBox = null; @FindBy(how = ID, using = "wastage-factor") private static WebElement wastageRateTextBox = null; @FindBy(how = ID, using = "buffer-percentage") private static WebElement bufferPercentageTextBox = null; @FindBy(how = ID, using = "adjustment-value") private static WebElement adjustmentValueTextBox = null; @FindBy(how = ID, using = "minimum-value") private static WebElement minimumValueTextBox = null; @FindBy(how = ID, using = "maximum-value") private static WebElement maximumValueTextBox = null; @FindBy(how = ID, using = "catchmentPopulation") private static WebElement ISAPopulationTextField = null; @FindBy(how = ID, using = "calculatedIsaValue") private static WebElement isaValueCalculated = null; @FindBy(how = ID, using = "catchmentPopulation") private static WebElement populationTextBox = null; @FindBy(how = ID, using = "saveIsa") private static WebElement programProductISASaveButton = null; @FindBy(how = ID, using = "cancelIsa") private static WebElement programProductISACancelButton = null; @FindBy(how = ID, using = "calculateButton") private static WebElement testCalculationButton = null; @FindBy(how = ID, using = "saveFailMessage") private static WebElement saveFailMessage = null; @FindBy(how = ID, using = "searchProduct") private static WebElement searchProduct = null; @FindBy(how = ID, using = "programProductFormula") private static WebElement ISAFormulaFromConfigureProgramISAModalWindow = null; @FindBy(how = ID, using = "monthlyRestockFormula") private static WebElement ISAFormulaFromISAFormulaModal = null; @FindBy(how = ID, using = "monthlyRestockLabel") private static WebElement monthlyRestockAmountLabel = null; @FindBy(how = ID, using = "productPrimaryName") private static WebElement productPrimaryName = null; @FindBy(how = ID, using = "isaModalHeader") private static WebElement programNameOnModalHeaderOFConfigureISAFormulaWindow = null; @FindBy(how = ID, using = "ISA-population") private static WebElement programNameOnPopulationLabelOFConfigureISAFormulaWindow = null; public ProgramProductISAPage(TestWebDriver driver) { super(driver); PageFactory.initElements(new AjaxElementLocatorFactory(TestWebDriver.getDriver(), 10), this); testWebDriver.setImplicitWait(10); } public void fillProgramProductISA(String ratio, String dosesPerYear, String wastage, String bufferPercentage, String adjustmentValue, String minimumValue, String maximumValue) { testWebDriver.waitForElementToAppear(ratioTextBox); enterValueInRatioTextField(ratio); enterValueInDosesTextField(dosesPerYear); enterValueInWastageTextField(wastage); enterValueInBufferPercentageTextField(bufferPercentage); enterValueInAdjustmentTextField(adjustmentValue); enterValueInMinimumTextField(minimumValue); enterValueInMaximumTextField(maximumValue); } public void enterValueInMinimumTextField(String minimumValue) { testWebDriver.waitForElementToAppear(minimumValueTextBox); minimumValueTextBox.sendKeys(minimumValue); } public void enterValueInMaximumTextField(String minimumValue) { testWebDriver.waitForElementToAppear(maximumValueTextBox); maximumValueTextBox.sendKeys(minimumValue); } public void enterValueInAdjustmentTextField(String adjustmentValue) { testWebDriver.waitForElementToAppear(adjustmentValueTextBox); adjustmentValueTextBox.clear(); adjustmentValueTextBox.sendKeys(adjustmentValue); } public void enterValueInBufferPercentageTextField(String bufferPercentage) { testWebDriver.waitForElementToAppear(bufferPercentageTextBox); bufferPercentageTextBox.clear(); bufferPercentageTextBox.sendKeys(bufferPercentage); } public void enterValueInWastageTextField(String wastage) { testWebDriver.waitForElementToAppear(wastageRateTextBox); wastageRateTextBox.clear(); wastageRateTextBox.sendKeys(wastage); } public void enterValueInDosesTextField(String dosesPerYear) { testWebDriver.waitForElementToAppear(dosesPerYearTextBox); dosesPerYearTextBox.clear(); dosesPerYearTextBox.sendKeys(dosesPerYear); } public void enterValueInRatioTextField(String ratio) { testWebDriver.waitForElementToAppear(ratioTextBox); ratioTextBox.sendKeys(Keys.ARROW_RIGHT); ratioTextBox.sendKeys(Keys.BACK_SPACE); ratioTextBox.sendKeys(ratio); } public boolean verifyErrorMessageDiv() { return saveFailMessage.isDisplayed(); } public String calculateISA(String population) { populationTextBox.clear(); populationTextBox.sendKeys(population); testWebDriver.sleep(100); testCalculationButton.click(); testWebDriver.sleep(100); return testWebDriver.getText(isaValueCalculated); } public String verifyISAFormula() { testWebDriver.sleep(500); testWebDriver.waitForElementToAppear(ISAFormulaFromConfigureProgramISAModalWindow); return ISAFormulaFromConfigureProgramISAModalWindow.getText(); } public String getISAFormulaFromISAFormulaModal() { testWebDriver.waitForElementToAppear(ISAFormulaFromISAFormulaModal); return ISAFormulaFromISAFormulaModal.getText(); } public void selectValueFromProgramDropDown(String valueToBeSelected) { testWebDriver.waitForElementToAppear(selectProgramSelectBox); testWebDriver.selectByVisibleText(selectProgramSelectBox, valueToBeSelected); } public String getProductsDisplayingOnConfigureProgramISAPage() { String productsLocator = "//div[@id='productPrimaryName']"; String productsListValue = ""; testWebDriver.waitForElementToAppear(productNameColumn); List<WebElement> productsList = testWebDriver.getElementsByXpath(productsLocator); for (WebElement product : productsList) { productsListValue = productsListValue + product.getText(); } return productsListValue; } public boolean verifyMonthlyRestockAmountPresent() { testWebDriver.waitForElementToAppear(ratioTextBox); return monthlyRestockAmountLabel.isDisplayed(); } public void selectProgram(String program) { testWebDriver.waitForElementToAppear(selectProgramSelectBox); testWebDriver.selectByVisibleText(selectProgramSelectBox, program); } public void editFormula() { testWebDriver.waitForElementToAppear(editFormulaButton); editFormulaButton.click(); } public List<WebElement> getAllSelectOptionsFromProgramDropDown() { testWebDriver.waitForElementToAppear(selectProgramSelectBox); return testWebDriver.getOptions(selectProgramSelectBox); } public void saveISA() { testWebDriver.waitForElementToAppear(programProductISASaveButton); programProductISASaveButton.click(); } public void cancelISA() { programProductISACancelButton.click(); } public void searchProduct(String product) { testWebDriver.waitForElementToAppear(searchProduct); searchProductTextBox.sendKeys(product); } public boolean verifySearchResults() { testWebDriver.waitForElementToAppear(productPrimaryName); return productPrimaryName.isDisplayed(); } public String fillProgramProductISA(String program, String ratio, String dosesPerYear, String wastage, String bufferPercentage, String adjustmentValue, String minimumValue, String maximumValue, String population) { selectProgram(program); editFormula(); fillProgramProductISA(ratio, dosesPerYear, wastage, bufferPercentage, adjustmentValue, minimumValue, maximumValue); String expectedISAValue = String.valueOf(Math.round(Integer.parseInt(calculateISA(population)) / 10)); saveISA(); return expectedISAValue; } public String getProgramNameDisplayedOnModalHeaderOFConfigureISAFormulaWindow() { return programNameOnModalHeaderOFConfigureISAFormulaWindow.getText(); } public String getProgramNameDisplayedOnPopulationLabelOFConfigureISAFormulaWindow() { return programNameOnPopulationLabelOFConfigureISAFormulaWindow.getText(); } public boolean verifyDosesPerYearTextBoxFieldOnISAModalWindowIsDisplayed() { return dosesPerYearTextBox.isDisplayed(); } public boolean verifyWastageRateTextBoxFieldOnISAModalWindowIsDisplayed() { return wastageRateTextBox.isDisplayed(); } public boolean verifyBufferPercentageTextBoxFieldOnISAModalWindowIsDisplayed() { return bufferPercentageTextBox.isDisplayed(); } public boolean verifyRatioTextBoxFieldOnISAModalWindowIsDisplayed() { return ratioTextBox.isDisplayed(); } public boolean verifyISAPopulationTextFieldOnISAModalWindowIsDisplayed() { return ISAPopulationTextField.isDisplayed(); } public boolean verifyAdjustmentValueTextBoxFieldOnISAModalWindowIsDisplayed() { return adjustmentValueTextBox.isDisplayed(); } public boolean verifyProgramProductISASaveButtonFieldOnISAModalWindowIsDisplayed() { return programProductISASaveButton.isDisplayed(); } public boolean verifyProgramProductISACancelButtonFieldOnISAModalWindowIsDisplayed() { return programProductISACancelButton.isDisplayed(); } }