/* * 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.How; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.thoughtworks.selenium.SeleneseTestBase.assertFalse; import static com.thoughtworks.selenium.SeleneseTestNgHelper.assertEquals; import static org.openqa.selenium.support.How.ID; public class VisitInformationPage extends DistributionTab { public static final String VERIFIED_BY_NAME = "verifiedByName"; public static final String VERIFIED_BY_TITLE = "verifiedByTitle"; public static final String CONFIRMED_BY_NAME = "confirmedByName"; public static final String CONFIRMED_BY_TITLE = "confirmedByTitle"; public static final String OBSERVATIONS = "observations"; public static final String VALUE = "value"; public static final String VEHICLE_ID = "vehicleId"; @FindBy(how = ID, using = "facilityVisitTab") private static WebElement facilityVisitTab = null; @FindBy(how = ID, using = "facilityVisitTabIcon") public static WebElement facilityVisitTabIcon = null; @FindBy(how = ID, using = "visitInformationLabel") private static WebElement visitInformationLabel = null; @FindBy(how = ID, using = "facilityVisitTabLabel") public static WebElement facilityVisitTabLabel = null; @FindBy(how = ID, using = OBSERVATIONS) public static WebElement observationsField = null; @FindBy(how = ID, using = VERIFIED_BY_NAME) public static WebElement verifiedByNameField = null; @FindBy(how = ID, using = VERIFIED_BY_TITLE) public static WebElement verifiedByTitleField = null; @FindBy(how = ID, using = CONFIRMED_BY_NAME) public static WebElement confirmedByNameField = null; @FindBy(how = ID, using = CONFIRMED_BY_TITLE) public static WebElement confirmedByTitleField = null; @FindBy(how = ID, using = "wasFacilityVisited") public static WebElement wasFacilityVisitedLabel = null; @FindBy(how = ID, using = "facilityVisitedYes") public static WebElement facilityVisitedYesRadioButton = null; @FindBy(how = ID, using = "facilityVisitedNo") public static WebElement facilityVisitedNoRadioButton = null; @FindBy(how = ID, using = "visitDate") public static WebElement visitDateField = null; @FindBy(how = ID, using = "vehicleId") public static WebElement vehicleIdField = null; @FindBy(how = How.XPATH, using = "//a[contains(@class,'ui-state-highlight')]") private static WebElement calender = null; @FindBy(how = ID, using = "badWeather") public static WebElement badWeather = null; @FindBy(how = ID, using = "noTransport") public static WebElement noTransport = null; @FindBy(how = ID, using = "facilityClosed") public static WebElement facilityClosed = null; @FindBy(how = ID, using = "unavailableFunds") public static WebElement unavailableFunds = null; @FindBy(how = ID, using = "notPartOfProgram") public static WebElement notPartOfProgram = null; @FindBy(how = ID, using = "other") public static WebElement other = null; @FindBy(how = ID, using = "otherTextBox") public static WebElement otherTextBox = null; public Map<String, WebElement> fieldMap = new HashMap<String, WebElement>() {{ put(VEHICLE_ID, vehicleIdField); put(OBSERVATIONS, observationsField); put(CONFIRMED_BY_NAME, confirmedByNameField); put(CONFIRMED_BY_TITLE, confirmedByTitleField); put(VERIFIED_BY_TITLE, verifiedByTitleField); put(VERIFIED_BY_NAME, verifiedByNameField); }}; public VisitInformationPage(TestWebDriver driver) { super(driver); } @Override public void verifyIndicator(String color) { removeFocusFromElement(); verifyOverallIndicator(facilityVisitTabIcon, color); } @Override public void enterValues(List<Map<String, String>> data) { Map<String, String> map = data.get(0); sendKeys(fieldMap.get(OBSERVATIONS), map.get(OBSERVATIONS)); fieldMap.get(OBSERVATIONS).sendKeys(Keys.TAB); sendKeys(fieldMap.get(VERIFIED_BY_NAME), map.get(VERIFIED_BY_NAME)); fieldMap.get(VERIFIED_BY_NAME).sendKeys(Keys.TAB); sendKeys(fieldMap.get(VERIFIED_BY_TITLE), map.get(VERIFIED_BY_TITLE)); fieldMap.get(VERIFIED_BY_TITLE).sendKeys(Keys.TAB); sendKeys(fieldMap.get(CONFIRMED_BY_NAME), map.get(CONFIRMED_BY_NAME)); fieldMap.get(CONFIRMED_BY_NAME).sendKeys(Keys.TAB); sendKeys(fieldMap.get(CONFIRMED_BY_TITLE), map.get(CONFIRMED_BY_TITLE)); fieldMap.get(CONFIRMED_BY_TITLE).sendKeys(Keys.TAB); } @Override public void verifyData(List<Map<String, String>> data) { for (Map<String, String> visitInformationData : data) { assertEquals(fieldMap.get(VEHICLE_ID).getAttribute(VALUE), visitInformationData.get(VEHICLE_ID)); assertEquals(fieldMap.get(OBSERVATIONS).getAttribute(VALUE), visitInformationData.get(OBSERVATIONS)); assertEquals(fieldMap.get(VERIFIED_BY_NAME).getAttribute(VALUE), visitInformationData.get(VERIFIED_BY_NAME)); assertEquals(fieldMap.get(VERIFIED_BY_TITLE).getAttribute(VALUE), visitInformationData.get(VERIFIED_BY_TITLE)); assertEquals(fieldMap.get(CONFIRMED_BY_NAME).getAttribute(VALUE), visitInformationData.get(CONFIRMED_BY_NAME)); assertEquals(fieldMap.get(CONFIRMED_BY_TITLE).getAttribute(VALUE), visitInformationData.get(CONFIRMED_BY_TITLE)); } } @Override public void navigate() { testWebDriver.sleep(1000); facilityVisitTab.click(); removeFocusFromElement(); } public String getVisitInformationPageLabel() { testWebDriver.waitForElementToAppear(visitInformationLabel); return visitInformationLabel.getText(); } public void enterObservations(String observations) { testWebDriver.waitForElementToAppear(observationsField); sendKeys(observationsField, observations); observationsField.sendKeys(Keys.TAB); } public void enterConfirmedByName(String confirmedByName) { testWebDriver.waitForElementToAppear(confirmedByNameField); sendKeys(confirmedByNameField, confirmedByName); confirmedByNameField.sendKeys(Keys.TAB); } public void enterConfirmedByTitle(String confirmedByTitle) { testWebDriver.waitForElementToAppear(confirmedByTitleField); sendKeys(confirmedByTitleField, confirmedByTitle); confirmedByTitleField.sendKeys(Keys.TAB); } public void enterVerifiedByName(String verifiedByName) { testWebDriver.waitForElementToAppear(verifiedByNameField); sendKeys(verifiedByNameField, verifiedByName); verifiedByNameField.sendKeys(Keys.TAB); } public void enterVerifiedByTitle(String verifiedByTitle) { testWebDriver.waitForElementToAppear(verifiedByTitleField); sendKeys(verifiedByTitleField, verifiedByTitle); verifiedByTitleField.sendKeys(Keys.TAB); } public void enterVisitDateAsCurrentDate() { testWebDriver.waitForElementToAppear(visitDateField); visitDateField.click(); testWebDriver.waitForElementToAppear(calender); calender.click(); visitDateField.sendKeys(Keys.TAB); } public void enterVehicleId(String vehicleId) { testWebDriver.waitForElementToAppear(vehicleIdField); sendKeys(vehicleIdField, vehicleId); vehicleIdField.sendKeys(Keys.TAB); } public String getFacilityVisitTabLabel() { testWebDriver.waitForElementToAppear(facilityVisitTabLabel); return facilityVisitTabLabel.getText(); } public String getWasFacilityVisitedLabel() { testWebDriver.waitForElementToAppear(wasFacilityVisitedLabel); return wasFacilityVisitedLabel.getText(); } public void selectFacilityVisitedYes() { testWebDriver.waitForElementToAppear(facilityVisitedYesRadioButton); facilityVisitedYesRadioButton.click(); removeFocusFromElement(); } public void selectFacilityVisitedNo() { testWebDriver.waitForElementToAppear(facilityVisitedNoRadioButton); facilityVisitedNoRadioButton.click(); removeFocusFromElement(); } public boolean isYesRadioButtonSelected() { testWebDriver.waitForElementToAppear(facilityVisitedYesRadioButton); return facilityVisitedYesRadioButton.isSelected(); } public boolean isNoRadioButtonSelected() { testWebDriver.waitForElementToAppear(facilityVisitedNoRadioButton); return facilityVisitedNoRadioButton.isSelected(); } public String getVisitDate() { testWebDriver.waitForElementToAppear(visitDateField); return visitDateField.getAttribute("value"); } public void selectReasonBadWeather() { testWebDriver.waitForElementToAppear(badWeather); badWeather.click(); removeFocusFromElement(); } public void selectReasonNoTransport() { testWebDriver.waitForElementToAppear(noTransport); noTransport.click(); removeFocusFromElement(); } public void selectReasonOther() { testWebDriver.waitForElementToAppear(other); other.click(); removeFocusFromElement(); } public void enterOtherReasonInTextBox(String reason) { testWebDriver.waitForElementToAppear(otherTextBox); sendKeys(otherTextBox, reason); otherTextBox.sendKeys(Keys.TAB); } public void verifyAllFieldsDisabled() { assertFalse("Yes radio button was enabled.", facilityVisitedYesRadioButton.isEnabled()); assertFalse("No radio button was enabled.", facilityVisitedNoRadioButton.isEnabled()); if (isYesRadioButtonSelected()) { assertFalse("Observation field enabled.", observationsField.isEnabled()); assertFalse("ConfirmedBy name field enabled.", confirmedByNameField.isEnabled()); assertFalse("ConfirmedBy title field enabled.", confirmedByTitleField.isEnabled()); assertFalse("VerifiedBy name field enabled.", verifiedByNameField.isEnabled()); assertFalse("VerifiedBy title Field field enabled.", verifiedByTitleField.isEnabled()); assertFalse("Visit date field was enabled.", visitDateField.isEnabled()); assertFalse("vehicle id field was enabled.", vehicleIdField.isEnabled()); } else if (isNoRadioButtonSelected()) { assertFalse("Bad Weather reason radio button enabled.", badWeather.isEnabled()); assertFalse("No Transport reason radio button enabled.", noTransport.isEnabled()); assertFalse("Facility Closed radio button enabled.", facilityClosed.isEnabled()); assertFalse("Unavailable Funds radio button enabled.", unavailableFunds.isEnabled()); assertFalse("Not Part Of Program radio button enabled.", notPartOfProgram.isEnabled()); assertFalse("Other radio button enabled.", other.isEnabled()); assertFalse("Other reason text field was enabled.", otherTextBox.isEnabled()); } } public void enterDataWhenFacilityVisited(String confirmName, String confirmTitle, String verifierName, String verifierTitle) { selectFacilityVisitedYes(); enterVisitDateAsCurrentDate(); enterConfirmedByName(confirmName); enterConfirmedByTitle(confirmTitle); enterVerifiedByName(verifierName); enterVerifiedByTitle(verifierTitle); } @Override public void removeFocusFromElement() { testWebDriver.waitForElementToAppear(visitInformationLabel); visitInformationLabel.click(); } public boolean isOtherReasonSelected() { testWebDriver.waitForElementToAppear(other); return other.isSelected(); } public String getOtherReason() { testWebDriver.waitForElementToAppear(otherTextBox); return otherTextBox.getAttribute("value"); } }