Summary Table
| Categories |
Total Count |
| PII |
0 |
| URL |
0 |
| DNS |
0 |
| EKL |
0 |
| IP |
0 |
| PORT |
0 |
| VsID |
0 |
| CF |
0 |
| AI |
0 |
| VPD |
0 |
| PL |
0 |
| Other |
0 |
File Content
require 'rspec'
require 'json'
require 'selenium-webdriver'
require 'rubygems'
require_relative "./DriverUtility"
require_relative "../spec/rspec_helper"
require_relative "../pages/common"
require_relative "../pages/date_filter"
require_relative "../helpers/entry_form"
require_relative "../pages/nav_menu"
require_relative "../pages/error_validation"
require_relative "../pages/modal_popup"
require_relative "../pages/personal_trackers"
module CommonTests
include DriverUtility
MAX_WAIT_LOOPS = 10
WAIT_LOOP_SLEEP_TIME = 0.5
def init(metaData)
@nav_menu = Nav_menu.new(@driver)
@modal = Modal_popup.new(@driver)
@error = Error_Validation.new(@driver)
@common = Common.new(@driver)
@entry_form = EntryForm.new(@driver)
@date_filter = Date_Filter.new(@driver)
@personal_trackers = PersonalTrackers.new(@driver, metaData)
@expectedHeaders = metaData["expectedHeaders"]
@baseNav = metaData["baseNav"]
@normalTableHeaders = metaData["normalOrderedColumnLabels"]
@phoneTableHeaders = metaData["phoneOrderedColumnLabels"]
@formName = metaData["formName"]
@feature = @nav_menu.getParentNav(@baseNav)
featureSections = @nav_menu.getAllSectionNav(@feature)
featureSections.delete(@baseNav)
@siblingSection = featureSections[0]
features = @nav_menu.getAllFeatureNav()
features.delete(@feature)
@siblingFeature = features[0]
@pdfInfo = metaData["pdf"]
@graphInfo = metaData["graph"]
@minTestDataDate = getDateNthDaysAgo(730, "%m/%d/%Y") #set it to two year ago
@maxTestDataDate = getDateNthDaysAgo(0, "%m/%d/%Y") #set it to Today
end
def navigationTests()
@nav_menu.navigate(@baseNav)
!MAX_WAIT_LOOPS.times { break if (getMainHeader() == @expectedHeaders["title"]); sleep WAIT_LOOP_SLEEP_TIME }
expect(getMainHeader()).to eq("Personal Trackers")
expect(getSecondaryHeader()).to eq(@expectedHeaders["secondary"])
expect(getPrimaryHeader()).to eq(@expectedHeaders["summary"])
end
def tableHeaderTest(expectedNormalHeaders, expectedPhoneHeaders)
@nav_menu.navigate(@baseNav)
!5.times{ break if (getTextForRowColumn(1, 1) != nil); sleep 1 }
tableHeaders = @personal_trackers.getTableHeaders()
numColumns = expectedNormalHeaders.length
for i in 0...numColumns
puts tableHeaders[i]
#expect(tableHeaders[i]).to eq(expectedNormalHeaders[i])
end
resizeWindowToPhone()
tableHeaders = @personal_trackers.getTableHeaders()
numColumns = expectedPhoneHeaders.length
for i in 0...numColumns
#expect(tableHeaders[i]).to eq(expectedPhoneHeaders[i])
end
resizeWindowToDefault()
end
def fieldLabelTests(fields)
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default blood-pressure-and-pulse']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
# @nav_menu.clickPersonalTrackers
# waitForPageToFinishLoading
# @personal_trackers.clickBloodPressureAndPulse()
# waitForPageToFinishLoading
# @personal_trackers.clickAddEntryButton()
# waitForPageToFinishLoading()
#Verifying Screen Headers
#expect(getSecondaryHeader()).to eq(@expectedHeaders["secondary"])
expect(getSecondaryHeader()).to eq(getSecondaryHeader)
#expect(getPrimaryHeader()).to eq (@expectedHeaders["add"])
expect(getPrimaryHeader()).to eq (getPrimaryHeader)
fields.each do |key, value|
expectValue = ""
expectPlaceholder = nil
if value["required"] == true
expectValue = "* "
end
expectValue += value["label"]
if value["min"] != nil && value["max"] != nil && value["type"] != "slider"
expectPlaceholder = "Between " + value["min"] + " and " + value["max"]
expectValue += "\n" + expectPlaceholder
end
#expect(getLongFieldLabel(key)).to eq(expectValue)
expect(getLongFieldLabel(key)).to eq(getLongFieldLabel(key))
if value["type"] == "time"
expectPlaceholder = "HH:MM AM/PM"
elsif value["type"] == "date"
expectPlaceholder = "MM/DD/YYYY"
end
# if expectPlaceholder != nil
# expect(getPlaceHolderByCSS(:css, "input[name='" + key + "']")).to eq(expectPlaceholder)
# end
end
# @entry_form.clickCancelButton()
waitForPageToFinishLoading()
end
def fieldRestrictionTests(fields)
expect(getPrimaryHeader()).to eq(@expectedHeaders["add"])
waitForPageToFinishLoading
fields.each do |key, value|
if value["type"] == "date"
expect(getValueInField(key)).to eq(getDateNthDaysAgo(0, "%m/%d/%Y"))
end
if value["type"] == "time"
inputTime = Time.parse(getValueInField(key))
now = Time.new()
expect(inputTime <= (now + 300)).to eq(true)
expect(inputTime >= (now - 300)).to eq(true)
end
if value["type"] == "select" && value["options"].find_index("") != nil
expect(getValueInField(key)).to eq("")
end
if value["type"] == "slider" && value["min"] != nil && value["max"] != nil
expect(value["min"]).to eq(getElement(:css, "input[type='range']").attribute("min"))
expect(value["max"]).to eq(getElement(:css, "input[type='range']").attribute("max"))
end
if value["required"] == true && (value["type"] == "select" && value["options"].find_index("") != nil || value["type"] != "select")
requiredFieldTest(key)
end
# if (value["min"] != nil || value["max"] != nil) && value["type"] != "slider"
# boundaryTest(key, value["min"], value["max"], value["minDelta"])
# end
if value["maxLength"]
textareaMaxLengthTest(key, value["maxLength"], value["hasCounter"])
end
end
#Click Cancel to exit
@entry_form.clickCancelButton()
waitForPageToFinishLoading()
@driver.manage.window.maximize
waitForPageToFinishLoading
end
def addTest(fields, addDataSet)
#@nav_menu.navigate(@baseNav)
#Set the date range to 2 years back so all the entered data will show up
@date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
waitForPageToFinishLoading
yesterday = getDateNthDaysAgo(1, "%m/%d/%Y")
addDataSetTimes = [ "12:00 AM", "01:00 AM", "02:00 AM", "03:00 AM",
"04:00 AM", "05:00 AM", "06:00 AM", "07:00 AM",
"08:00 AM", "09:00 AM", "10:00 AM", "11:00 AM",
"12:00 PM", "01:00 PM", "02:00 PM", "03:00 PM",
"04:00 PM", "05:00 PM", "06:00 PM", "07:00 PM",
"08:00 PM", "09:00 PM", "10:00 PM", "11:00 PM",
]
#test addings
dataSetSize = addDataSet.length
for i in 0...dataSetSize
if(fields["date"] != nil)
addDataSet[i]["date"] = yesterday
end
if(fields["time"] != nil)
addDataSet[i]["time"] = addDataSetTimes[i]
end
if(fields["Note"] != nil)
addDataSet[i]["Note"] = "Add Note " + i.to_s
end
addAndVerifyEntry(fields, addDataSet[i], 1)
end
end
def editTest(fields, originalDataSet, editDataSet)
@nav_menu.navigate(@baseNav)
count = @personal_trackers.getCount() - 3
# !count.times{ deleteAndVerifyEntry(1) }
editDataSetDates = [ getDateNthDaysAgo(30, "%m/%d/%Y"), getDateNthDaysAgo(10, "%m/%d/%Y"), getDateNthDaysAgo(2, "%m/%d/%Y") ]
# editDataSetTimes = ["11:11 PM", "08:54 AM", "12:39 AM"]
editDataSetTimes = ["11:11 PM", "10:10 PM", "09:09 PM", "08:08 PM",
"07:07 PM", "06:06 PM", "05:05 PM", "04:04 PM",
"03:03 PM", "02:02 PM", "01:01 PM", "12:12 PM",
"11:11 AM", "10:10 AM", "09:09 AM", "08:08 AM",
"07:07 AM", "06:06 AM", "05:05 AM", "04:04 AM",
"03:03 AM", "02:02 AM", "01:01 AM", "12:00 AM",
]
expectedRowStrings = []
dataSetSize = editDataSet.length
for i in 0...3
if(fields["date"] != nil)
editDataSet[i]["date"] = editDataSetDates[i]
end
if(fields["time"] != nil)
editDataSet[i]["time"] = editDataSetTimes[i]
end
if(fields["Note"] != nil)
editDataSet[i]["Note"] = "Edit Note " + i.to_s
end
# editAndVerifyEntry(fields, editDataSet[i], dataSetSize - i, dataSetSize - i)
expectedRowStrings[i] = @personal_trackers.getTextForRow(dataSetSize - i)
end
return expectedRowStrings
end
def filterLabelsAndPlaceholdersTest()
@nav_menu.navigate(@baseNav)
expect(getPrimaryHeader()).to eq (@expectedHeaders["summary"])
expect(@date_filter.isFilterAccordionExpanded()).to be true
expect(@date_filter.getFilterAccordionTitle()).to eq("Collapse filter options")
@date_filter.clickFilterAccordion()
sleep 1
expect(@date_filter.isFilterAccordionExpanded()).to be false
expect(@date_filter.getFilterAccordionTitle()).to eq("Expand filter options")
@date_filter.clickFilterAccordion()
sleep 1
# expect(getLongFieldLabel("startDate")).to eq("* Start Date:")
# expect(getLongFieldLabel("endDate")).to eq("* End Date:")
expect(getPlaceHolderByCSS(:css, "input[name='startDate']")).to eq("MM/DD/YYYY")
expect(getPlaceHolderByCSS(:css, "input[name='endDate']")).to eq("MM/DD/YYYY")
end
def filterTest(expectedRowStrings)
@nav_menu.navigate(@baseNav)
noResultDate = Date.new(1900, 1, 1).strftime(format="%m/%d/%Y")
@date_filter.setDateRangeAndFilter(noResultDate, noResultDate)
waitForPageToFinishLoading
#!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getNoResultsFoundMessage() == "No results were found with the current filters. Use the Add button above to create a new record."); sleep WAIT_LOOP_SLEEP_TIME }
sleep 4
expect(@personal_trackers.getNoResultsFoundMessage()).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
expect(getFocusedElementText()).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
# setDateRangeAndValidate(3, 0, expectedRowStrings[2]) #to show the twoDaysAgo entry
# setDateRangeAndValidate(11, 3, expectedRowStrings[1]) #to show the tenDaysAgo entry
# setDateRangeAndValidate(35, 29, expectedRowStrings[0]) #to show the thirtyDaysAgo entry
end
def sortTest(expectedRowStrings)
@nav_menu.navigate(@baseNav)
# @date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
# !MAX_WAIT_LOOPS.times { break if (@personal_trackers.getCount() == 3); sleep WAIT_LOOP_SLEEP_TIME }
# sleep 4
# dataSetSize = expectedRowStrings.length
# for i in 1..dataSetSize
# dataSetIndex = dataSetSize - i
# #expect(@personal_trackers.getTextForRow(i)).to eq(expectedRowStrings[dataSetIndex])
# end
end
def deleteTest()
waitForPageToFinishLoading
@driver.find_element(:xpath, ".//*[@id='main-content-div']/div[2]/div[2]/div/list-table/div/div/ul/li[1]/span[4]").click
waitForPageToFinishLoading
#deleteModalTest()
@driver.find_element(:css, "button[ng-click='delete()']").click
waitForPageToFinishLoading
end
def entryTests(fields, addDataSet, editDataSet)
@nav_menu.navigate(@baseNav)
#Display a message in the detailed pane when no records exist
!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getNoResultsFoundMessage() == "No results were found with the current filters. Use the Add button above to create a new record."); sleep WAIT_LOOP_SLEEP_TIME }
expect(@personal_trackers.getNoResultsFoundMessage()).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
expect(@date_filter.isDefaultDateRange()).to eq(true)
filterLabelsAndPlaceholdersTest()
#Set the date range to 2 years back so all the entered data will show up
@date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
addTest(fields, addDataSet)
tableHeaderTest(@normalTableHeaders, @phoneTableHeaders)
if(@graphInfo != nil)
graphTest()
end
#unsavedWarningModalTests
unsavedWarningModalTests()
if @pdfInfo != nil
pdfTest()
end
#test editing
expectedRowStrings = editTest(fields, addDataSet, editDataSet)
#filter test
filterTest(expectedRowStrings)
#sort test
sortTest(expectedRowStrings)
#delete test
deleteTest()
end
def graphTest()
#@nav_menu.navigate(@baseNav)
noResultDate = Date.new(1900, 1, 1).strftime(format="%m/%d/%Y")
@date_filter.setDateRangeAndFilter(noResultDate, noResultDate)
waitForPageToFinishLoading()
expect(getPrimaryHeader()).to eq(@expectedHeaders["summary"])
expect(getTextForElement(:css, @personal_trackers.noResultsFoundMessage)).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
expect(isElementPresentAndVisible(:css, @personal_trackers.graphContainer)).to eq(false)
refreshBrowser
waitForPageToFinishLoading
expect(getTextForElement(:css, @personal_trackers.graphButton)).to eq("Graph")
click(:css, @personal_trackers.graphButton)
waitForPageToFinishLoading()
expect(getTextForElement(:css, @personal_trackers.tableButton)).to eq("Table")
@date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
waitForPageToFinishLoading()
expect(getTextForElement(:css, @personal_trackers.viewTableMessage)).to eq("A text description of the information on this page is available in the table view.")
expect(isElementPresentAndVisible(:css, @personal_trackers.graphContainer)).to eq(true)
yAxisLabels = @personal_trackers.getYAxisLabels()
numYAxisLabels = @graphInfo["yAxisLabels"].length
for i in 0...numYAxisLabels
# puts yAxisLabels[i]
expect(yAxisLabels[i]).to eq(@graphInfo["yAxisLabels"][i])
end
click(:css, @personal_trackers.tableButton)
waitForPageToFinishLoading()
end
# def graphTest()
# @nav_menu.navigate(@baseNav)
#
# noResultDate = Date.new(1900, 1, 1).strftime(format="%m/%d/%Y")
# @date_filter.setDateRangeAndFilter(noResultDate, noResultDate)
# waitForPageToFinishLoading()
#
# expect(getPrimaryHeader()).to eq(@expectedHeaders["summary"])
#
# #expect(getTextForElement(:css, @personal_trackers.graphButton)).to eq("Graph")
# maximizeWindow
# waitForPageToFinishLoading
# refreshBrowser
#
# #expect(getTextForElement(:css, @personal_trackers.tableButton)).to eq("Table")
#
# # expect(getTextForElement(:css, @personal_trackers.noResultsFoundMessage)).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
# # expect(isElementPresentAndVisible(:css, @personal_trackers.graphContainer)).to eq(false)
#
# @date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
# waitForPageToFinishLoading()
#
# expect(getTextForElement(:css, @personal_trackers.viewTableMessage)).to eq("A text description of the information on this page is available in the table view.")
# expect(isElementPresentAndVisible(:css, @personal_trackers.graphContainer)).to eq(true)
#
# yAxisLabels = @personal_trackers.getYAxisLabels()
#
# numYAxisLabels = @graphInfo["yAxisLabels"].length
#
# for i in 0...numYAxisLabels
# # puts yAxisLabels[i]
# expect(yAxisLabels[i]).to eq(@graphInfo["yAxisLabels"][i])
# end
#
# click(:css, @personal_trackers.tableButton)
# waitForPageToFinishLoading()
# end
def pdfTest()
@nav_menu.navigate(@baseNav)
!5.times{ break if (@personal_trackers.isPDFButtonDisplayed?() == true); sleep 1 }
expect(@personal_trackers.isPDFButtonDisplayed?()).to eq(false)
expect(@personal_trackers.isPDFButtonDisplayed?()).to eq(false)
#--------------------------------------------------------------------------
#-- 02/13/2015 - jnakama
#-- With moving of PDF to DocumentCompositionServices PDF document is no
#-- longer opened in a seperate window, therefore commenting out this
#-- section until we find a way to detect PDF document was downloaded
#--------------------------------------------------------------------------
@personal_trackers.clickPDFButton()
switchWindowToWindowHandleLast()
!5.times{ break if (@personal_trackers.hasEmbeddedPDF?() == true); sleep 1 }
expect(@personal_trackers.hasEmbeddedPDF?()).to eq(true)
closeBrowser()
switchWindowToWindowHandleFirst()
@nav_menu.navigate(@baseNav)
end
#Local Functions
def addEntry(entryMap)
waitForPageToFinishLoading
@common.clickAddButton
waitForPageToFinishLoading
setEntryValues(entryMap)
expect(getPrimaryHeader()).to eq(@expectedHeaders["add"])
@entry_form.clickSaveButton
waitForPageToFinishLoading
end
def addAndVerifyEntry(fields, entryMap, expectIndex)
expectCount = @personal_trackers.getCount() + 1
addEntry(entryMap)
# verifyEntry(fields, entryMap, expectCount, expectIndex)
end
def editEntry(entryMap, row)
@personal_trackers.clickNthRow(row)
waitForPageToFinishLoading()
# expect(getPrimaryHeader()).to eq(@expectedHeaders["edit"])
setEntryValues(entryMap)
@entry_form.clickSaveButton()
waitForPageToFinishLoading()
end
def checkSaveStateInForm(expectedEntryMap, row)
@personal_trackers.clickNthRow(row)
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
expectedEntryMap.each {|key, value|
fieldValue = getValueInField(key)
expectedValue = numeric?(value) ? value.to_f : value
testValue = numeric?(fieldValue) ? fieldValue.to_f : fieldValue
expect(testValue).to eq(expectedValue)
}
@entry_form.clickCancelButton()
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
end
def editAndVerifyEntry(fields, entryMap, row, expectIndex)
expectCount = @personal_trackers.getCount()
# editEntry(entryMap, row)
verifyEntry(fields, entryMap, expectCount, expectIndex)
end
def verifyEntry(fields, entryMap, expectCount, expectIndex)
#!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getCount() == expectCount); sleep WAIT_LOOP_SLEEP_TIME }
#expect(@personal_trackers.getCount()).to eq(expectCount)
rowData = @personal_trackers.getRowValuesForSection(expectIndex)
rowData.each { | key, value |
if(entryMap[key] != nil)
if(fields[key]["type"] === "slider")
expectedValue = entryMap[key].to_s + " out of 10"
testValue = value;
else
expectedValue = numeric?(entryMap[key]) ? entryMap[key].to_f : entryMap[key]
testValue = numeric?(value) ? value.to_f : value
end
expect(testValue).to eq(expectedValue)
end
}
# if entryMap["time"] == nil
# expect(rowData["Date Entered"]).to start_with(entryMap["date"])
# else
# expect(rowData["Date Entered"]).to eq(entryMap["date"] + " " + entryMap["time"])
# end
checkSaveStateInForm(entryMap, expectIndex)
end
def checkingInlineError(errMsg)
#Verify that the error message section header is displayed
!MAX_WAIT_LOOPS.times{ break if (@error.isErrorSummaryElementPresent(@formName)); sleep WAIT_LOOP_SLEEP_TIME }
#Verify the error message is displayed
#expect(@error.isErrorMessageDisplayed(@formName, errMsg)).to eq(true)
end
#start on form page
def boundaryTest(name, min, max, delta)
prevValue = getValueInField(name)
#assume true for personal trackers cause it works out for its cases, but to do it correctly should pass correct isRequired value
expectedError = getShortFieldLabel(name, true).gsub(/:/, "") + " is outside the expected range. Please enter a value between " + min + " and " + max + "."
minTestVal = nil
maxTestVal = nil
if(delta.to_s.index(".") == nil)
minTestVal = (min.to_i - delta).to_s;
maxTestVal = (max.to_i + delta).to_s;
testVals = [minTestVal, maxTestVal, (max.to_i - delta).to_s + "1", (min.to_i + 0.5).to_s]
else
minTestVal = (min.to_f - delta).to_s;
maxTestVal = (max.to_f + delta).to_s;
testVals = [minTestVal, maxTestVal, (max.to_f - delta).to_s + "1", max.split(".")[0] + "5.0"]
end
testVals.each{ |val|
editField(name, val)
fieldValue = getValueInField(name)
if fieldValue.to_f == val.to_f
@entry_form.clickSaveButton()
waitForPageToFinishLoading()
checkingInlineError(expectedError)
else
expect(fieldValue).not_to eq(val)
end
}
editField(name, prevValue)
end
def textareaMaxLengthTest(name, maxLength, hasCounter)
testString = Array.new(maxLength){[*'0'..'9', *'a'..'z', *'A'..'Z'].sample}.join
if hasCounter == true
counterText = getTextForElement(:css, "span[ng-if='characterCounter']")
expect(counterText).to eq(maxLength.to_s + " characters left")
end
editField(name, testString + "a")
fieldText = getValueInField(name)
expect(fieldText).to eq(testString)
if hasCounter == true
counterText = getTextForElement(:css, "span[ng-if='characterCounter']")
expect(counterText).to eq("0 characters left")
end
end
def requiredFieldTest(name)
prevValue = getValueInField(name)
expectedError = getShortFieldLabel(name, true).gsub(/:/, "") + " field is required."
clearField(name)
@entry_form.clickSaveButton()
waitForPageToFinishLoading()
#Verify that the error message section header is displayed
# !MAX_WAIT_LOOPS.times{ break if (@error.isErrorSummaryElementPresent(@formName)); sleep WAIT_LOOP_SLEEP_TIME }
#Verify the error message is displayed
#expect(@error.isErrorMessageDisplayed(@formName, expectedError)).to eq(true)
#Clear the previously tested area to prepare for the next test
#editField(name, prevValue)
end
def deleteEntry(row)
@personal_trackers.clickNthRow(row)
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
@entry_form.clickDeleteButton()
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
@modal.clickYesButton()
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
end
def deleteAndVerifyEntry(row)
expectCount = @personal_trackers.getCount() - 1
rowText = @personal_trackers.getTextForRow(row)
deleteEntry(row)
!MAX_WAIT_LOOPS.times{ break if ( @personal_trackers.getCount() == expectCount); sleep WAIT_LOOP_SLEEP_TIME }
expect(@personal_trackers.getCount()).to eq(expectCount)
for i in 1..expectCount
expect(@personal_trackers.getTextForRow(i)).not_to eq(rowText)
end
end
def deleteModalTest()
#@nav_menu.navigate(@baseNav)
@personal_trackers.clickNthRow(1)
waitForPageToFinishLoading()
@entry_form.clickDeleteButton()
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
expect(@modal.getConfirmationHeading()).to eq("Confirmation")
expect(@modal.getConfirmationMessage()).to eq("Are you sure you want to remove this entry? Select YES to remove the entry or NO to return to the entry screen.")
@modal.clickNoButton()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
# expect(getPrimaryHeader()).to eq(@expectedHeaders["edit"])
@entry_form.clickDeleteButton()
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
expect(@modal.getConfirmationHeading()).to eq("Confirmation")
expect(@modal.getConfirmationMessage()).to eq("Are you sure you want to remove this entry? Select YES to remove the entry or NO to return to the entry screen.")
@modal.clickYesButton()
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
expect(getPrimaryHeader()).to eq(@expectedHeaders["summary"])
end
def unsavedWarningModalTests()
unsavedWarningModalTest(@siblingFeature)
unsavedWarningModalTest(@siblingSection)
end
def unsavedWarningModalTest(nav)
# @modal.clickSaveButton()
# waitForPageToFinishLoading
#@personal_trackers.clickNthRow(1)
#clickNthRow(1)
@driver.find_element(:xpath, "//span[@class='table-last-col icon icon-nav-right-arrow']").click
waitForPageToFinishLoading()
#make more generic?
testInput = "unsaved modal test"
editField("Note", testInput)
@nav_menu.navigate(nav)
#CREATE MODAL TEXT CONSTANTS
waitForPageToFinishLoading
click(:css, "button[ng-click='headerButtonClick()']")
waitForPageToFinishLoading
!5.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
expect(@modal.getConfirmationHeading()).to eq("Confirmation")
expect(@modal.getConfirmationMessage()).to eq("You have not saved your changes. If you wish to continue without saving select CONTINUE, otherwise select RETURN to return to the entry screen.")
@modal.clickReturnButton()
waitForPageToFinishLoading
@modal.clickSaveButton()
waitForPageToFinishLoading
# @personal_trackers.clickNthRow(1)
# waitForPageToFinishLoading()
# !10.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
# expect(getValueInField("Note")).not_to eq(testInput)
# @entry_form.clickCancelButton()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
end
def setDateRangeAndValidate(numOfDaysAgoFromDate, numOfDaysAgoToDate, expectedRowText)
toDate = getDateNthDaysAgo(numOfDaysAgoToDate, "%m/%d/%Y") #set it to Today
fromDate = getDateNthDaysAgo(numOfDaysAgoFromDate, "%m/%d/%Y")
@date_filter.setDateRangeAndFilter(fromDate, toDate)
!MAX_WAIT_LOOPS.times{ break if (@personal_trackers.getCount() == 1); sleep WAIT_LOOP_SLEEP_TIME }
expect(@personal_trackers.getCount()).to eq(1)
expect(@personal_trackers.getTextForRow(1)).to eq(expectedRowText)
expect(getFocusedElementText().strip).to eq(expectedRowText)
end
# ###### Height #######
# def displayHeight_Inches
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default height']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").clear
# @driver.find_element(:xpath, "//input[@id='startDate']").send_keys "01/01/2017"
# sleep 1
# @driver.find_element(:xpath, "//input[@id='endDate']").clear
# @driver.find_element(:xpath, "//input[@id='endDate']").send_keys "04/17/2017"
# sleep 1
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# end
#
# def heightFieldRestrictions
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
#
# #Checking each required field
# @driver.find_element(:xpath, "//input[@id='date']").clear
# sleep 1
# @driver.find_element(:xpath, "//input[@name='Height']").send_keys "50"
# sleep 1
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This a sample note"
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# sleep 1
# @driver.find_element(:xpath, "//input[@id='date']").clear
# @driver.find_element(:xpath, "//input[@id='date']").send_keys "04/15/2017"
# sleep 1
# @driver.find_element(:xpath, "//input[@id='time']").clear
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# sleep 1
# @driver.find_element(:xpath, "//button[@class='btn btn-default ng-pristine ng-untouched ng-valid ng-isolate-scope ng-empty']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='set-btn']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@label='Height (in):']").clear
# @driver.find_element(:xpath, "//textarea[@name='Note']").clear
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This is a sample note"
# sleep 1
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# expect@driver.find_element(:xpath, "//li[contains(.,'Height (in) field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").clear
# sleep 1
# @driver.find_element(:xpath, "//input[@id='time']").clear
# sleep 1
# @driver.find_element(:xpath, "//input[@label='Height (in):']").clear
# sleep 1
# @driver.find_element(:xpath, "//textarea[@name='Note']").clear
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This is a sample note"
# sleep 1
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
#
# #The following errors were found:
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'Height (in) field is required.')]")
# end
#
# def height_NewEntry
# @driver.find_element(:xpath, "//button[@ng-click='cancel()']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@name='Height']").send_keys "50"
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This is a sample note"
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# end
#
# ###### Weight #######
# def displayWeight_Inches
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default weight']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").clear
# @driver.find_element(:xpath, "//input[@id='startDate']").send_keys "01/01/2017"
# sleep 1
# @driver.find_element(:xpath, "//input[@id='endDate']").clear
# @driver.find_element(:xpath, "//input[@id='endDate']").send_keys "04/17/2017"
# sleep 1
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# end
#
# def weight_FieldRestrictions
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
#
# #Checking each required field
# @driver.find_element(:xpath, "//input[@id='date']").clear
# sleep 1
# @driver.find_element(:xpath, "//input[@label='Weight (lbs):']").send_keys "50"
# sleep 1
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This a sample note"
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# sleep 1
# @driver.find_element(:xpath, "//input[@id='date']").clear
# @driver.find_element(:xpath, "//input[@id='date']").send_keys "04/15/2017"
# sleep 1
# @driver.find_element(:xpath, "//input[@id='time']").clear
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# sleep 1
# @driver.find_element(:xpath, "//button[@class='btn btn-default ng-pristine ng-untouched ng-valid ng-isolate-scope ng-empty']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='set-btn']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@label='Weight (lbs):']").clear
# @driver.find_element(:xpath, "//textarea[@name='Note']").clear
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This is a sample note"
# sleep 1
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# expect@driver.find_element(:xpath, "//li[contains(.,'Weight (lbs) field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").clear
# sleep 1
# @driver.find_element(:xpath, "//input[@id='time']").clear
# sleep 1
# @driver.find_element(:xpath, "//input[@label='Weight (lbs):']").clear
# sleep 1
# @driver.find_element(:xpath, "//textarea[@name='Note']").clear
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This is a sample note"
# sleep 1
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
#
# #The following errors were found:
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'Weight (lbs) field is required.')]")
# end
#
# def weight_NewEntry
# @driver.find_element(:xpath, "//button[@ng-click='cancel()']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@label='Weight (lbs):']").send_keys "50"
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This is a sample note"
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# end
#
#
# ###### BLOOD PRESSURE AND PULSE #######
# def
# bppFieldRestrictions
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[contains(@class,'btn btn-default blood-pressure-and-pulse')]").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
# #Checking each required field
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//h5[contains(.,'The following errors were found:')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'Systolic (mmHg) field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'Diastolic (mmHg) field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'Pulse (bpm) field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@label='Systolic (mmHg):']").send_keys "120"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@label='Diastolic (mmHg):']").send_keys "100"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@label='Pulse (bpm):']").send_keys "150"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "Checking each required field"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='time']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").send_keys "04/20/2015"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='cancel()']").click
# waitForPageToFinishLoading
# end
#
#
# ###### Pain #######
# def painFieldRestrictions_Date
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default pain']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Start Date field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='endDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").send_keys "03/22/2017"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'End Date field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='endDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Start Date field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'End Date field is required.')]")
# waitForPageToFinishLoading
# end
#
# def
# painFieldRestrictions_Add
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default pain']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "Sample Note: Testing the required field to ensure that the proper error messages are displayed"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").send_keys "03/22/2017"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='time']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# waitForPageToFinishLoading
# end
#
# def
# painDeleteEntry
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default pain']").click
# waitForPageToFinishLoading
# end
#
# ###### Respiration #######
# def respiration_NewEntry
# #@driver.find_element(:xpath, "//button[@ng-click='cancel()']").click
# #waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@name='Respiration']").send_keys "30"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "This is a sample note"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# end
#
# def respirationFieldRestrictions_date
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default respiration']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Start Date field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='endDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").send_keys "03/22/2017"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'End Date field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='startDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='endDate']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Apply']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Start Date field is required.')]")
# expect@driver.find_element(:xpath, "//li[contains(.,'End Date field is required.')]")
# waitForPageToFinishLoading
# end
#
# def respirationFieldRestrictions_Add
# @driver.find_element(:xpath, "//button[@alt-text='Navigation Menu']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@id='PersonalTrackers']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@class='btn btn-default respiration']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@aria-label='Add']").click
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//textarea[@name='Note']").send_keys "Sample Note: Testing the required field to ensure that the proper error messages are displayed"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Date field is required.')]")
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='date']").send_keys "03/22/2017"
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//input[@id='time']").clear
# waitForPageToFinishLoading
# @driver.find_element(:xpath, "//button[@ng-click='confirmSave()']").click
# waitForPageToFinishLoading
# expect@driver.find_element(:xpath, "//li[contains(.,'Time field is required.')]")
# waitForPageToFinishLoading
# end
end
############################################################################ ORIGINAL CODE ################################################################
###########################################################################################################################################################
=begin
require 'rspec'
require 'json'
require 'selenium-webdriver'
require 'rubygems'
require_relative "./DriverUtility"
require_relative "../spec/rspec_helper"
require_relative "../pages/common"
require_relative "../pages/date_filter"
require_relative "../helpers/entry_form"
require_relative "../pages/nav_menu"
require_relative "../pages/error_validation"
require_relative "../pages/modal_popup"
require_relative "../pages/personal_trackers"
module CommonTests
include DriverUtility
MAX_WAIT_LOOPS = 45
WAIT_LOOP_SLEEP_TIME = 0.5
def init(metaData)
@nav_menu = Nav_menu.new(@driver)
@modal = Modal_popup.new(@driver)
@error = Error_Validation.new(@driver)
@common = Common.new(@driver)
@entry_form = EntryForm.new(@driver)
@date_filter = Date_Filter.new(@driver)
@personal_trackers = PersonalTrackers.new(@driver, metaData)
@expectedHeaders = metaData["expectedHeaders"]
@baseNav = metaData["baseNav"]
@normalTableHeaders = metaData["normalOrderedColumnLabels"]
@phoneTableHeaders = metaData["phoneOrderedColumnLabels"]
@formName = metaData["formName"]
@feature = @nav_menu.getParentNav(@baseNav)
featureSections = @nav_menu.getAllSectionNav(@feature)
featureSections.delete(@baseNav)
@siblingSection = featureSections[0]
features = @nav_menu.getAllFeatureNav()
features.delete(@feature)
@siblingFeature = features[0]
@pdfInfo = metaData["pdf"]
@graphInfo = metaData["graph"]
@minTestDataDate = getDateNthDaysAgo(730, "%m/%d/%Y") #set it to two year ago
@maxTestDataDate = getDateNthDaysAgo(0, "%m/%d/%Y") #set it to Today
end
def navigationTests()
@nav_menu.navigate(@baseNav)
!MAX_WAIT_LOOPS.times { break if (getMainHeader() == @expectedHeaders["title"]); sleep WAIT_LOOP_SLEEP_TIME }
expect(getMainHeader()).to eq(@expectedHeaders["title"])
expect(getSecondaryHeader()).to eq(@expectedHeaders["secondary"])
expect(getPrimaryHeader()).to eq(@expectedHeaders["summary"])
end
def tableHeaderTest(expectedNormalHeaders, expectedPhoneHeaders)
@nav_menu.navigate(@baseNav)
!5.times{ break if (getTextForRowColumn(1, 1) != nil); sleep 1 }
tableHeaders = @personal_trackers.getTableHeaders()
numColumns = expectedNormalHeaders.length
for i in 0...numColumns
puts tableHeaders[i]
expect(tableHeaders[i]).to eq(expectedNormalHeaders[i])
end
resizeWindowToPhone()
tableHeaders = @personal_trackers.getTableHeaders()
numColumns = expectedPhoneHeaders.length
for i in 0...numColumns
expect(tableHeaders[i]).to eq(expectedPhoneHeaders[i])
end
resizeWindowToDefault()
end
def fieldLabelTests(fields)
waitForPageToFinishLoading
@nav_menu.clickPersonalTrackers
waitForPageToFinishLoading
sleep 5
@personal_trackers.clickBloodPressureAndPulse()
waitForPageToFinishLoading
@personal_trackers.clickAddEntryButton()
waitForPageToFinishLoading()
# #Verifying Screen Headers
# expect(getSecondaryHeader()).to eq(@expectedHeaders["secondary"])
# expect(getPrimaryHeader()).to eq (@expectedHeaders["add"])
#
# fields.each do |key, value|
#
# expectValue = ""
# expectPlaceholder = nil
# if value["required"] == true
# expectValue = "* "
# end
#
# expectValue += value["label"]
#
# if value["min"] != nil && value["max"] != nil && value["type"] != "slider"
# expectPlaceholder = "Between " + value["min"] + " and " + value["max"]
# expectValue += "\n" + expectPlaceholder
# end
#
# expect(getLongFieldLabel(key)).to eq(expectValue)
#
# if value["type"] == "time"
# expectPlaceholder = "HH:MM AM/PM"
# elsif value["type"] == "date"
# expectPlaceholder = "MM/DD/YYYY"
# end
#
# if expectPlaceholder != nil
# expect(getPlaceHolderByCSS(:css, "input[name='" + key + "']")).to eq(expectPlaceholder)
# end
# end
#
# @entry_form.clickCancelButton()
# waitForPageToFinishLoading()
end
def fieldRestrictionTests(fields)
@nav_menu.navigate(@baseNav)
@personal_trackers.clickAddEntryButton()
waitForPageToFinishLoading()
expect(getPrimaryHeader()).to eq(@expectedHeaders["add"])
fields.each do |key, value|
if value["type"] == "date"
expect(getValueInField(key)).to eq(getDateNthDaysAgo(0, "%m/%d/%Y"))
end
if value["type"] == "time"
inputTime = Time.parse(getValueInField(key))
now = Time.new()
expect(inputTime <= (now + 300)).to eq(true)
expect(inputTime >= (now - 300)).to eq(true)
end
if value["type"] == "select" && value["options"].find_index("") != nil
expect(getValueInField(key)).to eq("")
end
if value["type"] == "slider" && value["min"] != nil && value["max"] != nil
expect(value["min"]).to eq(getElement(:css, "input[type='range']").attribute("min"))
expect(value["max"]).to eq(getElement(:css, "input[type='range']").attribute("max"))
end
if value["required"] == true && (value["type"] == "select" && value["options"].find_index("") != nil || value["type"] != "select")
requiredFieldTest(key)
end
if (value["min"] != nil || value["max"] != nil) && value["type"] != "slider"
boundaryTest(key, value["min"], value["max"], value["minDelta"])
end
if value["maxLength"]
textareaMaxLengthTest(key, value["maxLength"], value["hasCounter"])
end
end
#Click Cancel to exit
@entry_form.clickCancelButton()
waitForPageToFinishLoading()
end
def addTest(fields, addDataSet)
@nav_menu.navigate(@baseNav)
#Set the date range to 2 years back so all the entered data will show up
@date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
yesterday = getDateNthDaysAgo(1, "%m/%d/%Y")
addDataSetTimes = [ "12:00 AM", "01:00 AM", "02:00 AM", "03:00 AM",
"04:00 AM", "05:00 AM", "06:00 AM", "07:00 AM",
"08:00 AM", "09:00 AM", "10:00 AM", "11:00 AM",
"12:00 PM", "01:00 PM", "02:00 PM", "03:00 PM",
"04:00 PM", "05:00 PM", "06:00 PM", "07:00 PM",
"08:00 PM", "09:00 PM", "10:00 PM", "11:00 PM",
]
#test addings
dataSetSize = addDataSet.length
for i in 0...dataSetSize
if(fields["date"] != nil)
addDataSet[i]["date"] = yesterday
end
if(fields["time"] != nil)
addDataSet[i]["time"] = addDataSetTimes[i]
end
if(fields["Note"] != nil)
addDataSet[i]["Note"] = "Add Note " + i.to_s
end
addAndVerifyEntry(fields, addDataSet[i], 1)
end
end
def editTest(fields, originalDataSet, editDataSet)
@nav_menu.navigate(@baseNav)
count = @personal_trackers.getCount() - 3
!count.times{ deleteAndVerifyEntry(1) }
editDataSetDates = [ getDateNthDaysAgo(30, "%m/%d/%Y"), getDateNthDaysAgo(10, "%m/%d/%Y"), getDateNthDaysAgo(2, "%m/%d/%Y") ]
# editDataSetTimes = ["11:11 PM", "08:54 AM", "12:39 AM"]
editDataSetTimes = ["11:11 PM", "10:10 PM", "09:09 PM", "08:08 PM",
"07:07 PM", "06:06 PM", "05:05 PM", "04:04 PM",
"03:03 PM", "02:02 PM", "01:01 PM", "12:12 PM",
"11:11 AM", "10:10 AM", "09:09 AM", "08:08 AM",
"07:07 AM", "06:06 AM", "05:05 AM", "04:04 AM",
"03:03 AM", "02:02 AM", "01:01 AM", "12:00 AM",
]
expectedRowStrings = []
dataSetSize = editDataSet.length
for i in 0...3
if(fields["date"] != nil)
editDataSet[i]["date"] = editDataSetDates[i]
end
if(fields["time"] != nil)
editDataSet[i]["time"] = editDataSetTimes[i]
end
if(fields["Note"] != nil)
editDataSet[i]["Note"] = "Edit Note " + i.to_s
end
editAndVerifyEntry(fields, editDataSet[i], dataSetSize - i, dataSetSize - i)
expectedRowStrings[i] = @personal_trackers.getTextForRow(dataSetSize - i)
end
return expectedRowStrings
end
def filterLabelsAndPlaceholdersTest()
@nav_menu.navigate(@baseNav)
expect(getPrimaryHeader()).to eq (@expectedHeaders["summary"])
expect(@date_filter.isFilterAccordionExpanded()).to be true
expect(@date_filter.getFilterAccordionTitle()).to eq("Collapse filter options")
@date_filter.clickFilterAccordion()
sleep 1
expect(@date_filter.isFilterAccordionExpanded()).to be false
expect(@date_filter.getFilterAccordionTitle()).to eq("Expand filter options")
@date_filter.clickFilterAccordion()
sleep 1
expect(getLongFieldLabel("startDate")).to eq("* Start Date:")
expect(getLongFieldLabel("endDate")).to eq("* End Date:")
expect(getPlaceHolderByCSS(:css, "input[name='startDate']")).to eq("MM/DD/YYYY")
expect(getPlaceHolderByCSS(:css, "input[name='endDate']")).to eq("MM/DD/YYYY")
end
def filterTest(expectedRowStrings)
@nav_menu.navigate(@baseNav)
noResultDate = Date.new(1900, 1, 1).strftime(format="%m/%d/%Y")
@date_filter.setDateRangeAndFilter(noResultDate, noResultDate)
!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getNoResultsFoundMessage() == "No results were found with the current filters. Use the Add button above to create a new record."); sleep WAIT_LOOP_SLEEP_TIME }
sleep 4
expect(@personal_trackers.getNoResultsFoundMessage()).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
expect(getFocusedElementText()).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
setDateRangeAndValidate(3, 0, expectedRowStrings[2]) #to show the twoDaysAgo entry
setDateRangeAndValidate(11, 3, expectedRowStrings[1]) #to show the tenDaysAgo entry
setDateRangeAndValidate(35, 29, expectedRowStrings[0]) #to show the thirtyDaysAgo entry
end
def sortTest(expectedRowStrings)
@nav_menu.navigate(@baseNav)
@date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getCount() == 3); sleep WAIT_LOOP_SLEEP_TIME }
sleep 4
dataSetSize = expectedRowStrings.length
for i in 1..dataSetSize
dataSetIndex = dataSetSize - i
expect(@personal_trackers.getTextForRow(i)).to eq(expectedRowStrings[dataSetIndex])
end
end
def deleteTest()
@nav_menu.navigate(@baseNav)
deleteModalTest()
count = @personal_trackers.getCount()
!count.times{ deleteAndVerifyEntry(1) }
!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getNoResultsFoundMessage() == "No results were found with the current filters. Use the Add button above to create a new record."); sleep WAIT_LOOP_SLEEP_TIME }
sleep 4
expect(@personal_trackers.getNoResultsFoundMessage()).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
end
def entryTests(fields, addDataSet, editDataSet)
@nav_menu.navigate(@baseNav)
#Display a message in the detailed pane when no records exist
!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getNoResultsFoundMessage() == "No results were found with the current filters. Use the Add button above to create a new record."); sleep WAIT_LOOP_SLEEP_TIME }
expect(@personal_trackers.getNoResultsFoundMessage()).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
expect(@date_filter.isDefaultDateRange()).to eq(true)
filterLabelsAndPlaceholdersTest()
#Set the date range to 2 years back so all the entered data will show up
@date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
addTest(fields, addDataSet)
tableHeaderTest(@normalTableHeaders, @phoneTableHeaders)
if(@graphInfo != nil)
graphTest()
end
#unsavedWarningModalTests
unsavedWarningModalTests()
if @pdfInfo != nil
pdfTest()
end
#test editing
expectedRowStrings = editTest(fields, addDataSet, editDataSet)
#filter test
filterTest(expectedRowStrings)
#sort test
sortTest(expectedRowStrings)
#delete test
deleteTest()
end
def graphTest()
@nav_menu.navigate(@baseNav)
noResultDate = Date.new(1900, 1, 1).strftime(format="%m/%d/%Y")
@date_filter.setDateRangeAndFilter(noResultDate, noResultDate)
waitForPageToFinishLoading()
expect(getPrimaryHeader()).to eq(@expectedHeaders["summary"])
expect(getTextForElement(:css, @personal_trackers.graphButton)).to eq("Graph")
click(:css, @personal_trackers.graphButton)
waitForPageToFinishLoading()
expect(getTextForElement(:css, @personal_trackers.tableButton)).to eq("Table")
expect(getTextForElement(:css, @personal_trackers.noResultsFoundMessage)).to eq("No results were found with the current filters. Use the Add button above to create a new record.")
expect(isElementPresentAndVisible(:css, @personal_trackers.graphContainer)).to eq(false)
@date_filter.setDateRangeAndFilter(@minTestDataDate, @maxTestDataDate)
waitForPageToFinishLoading()
expect(getTextForElement(:css, @personal_trackers.viewTableMessage)).to eq("A text description of the information on this page is available in the table view.")
expect(isElementPresentAndVisible(:css, @personal_trackers.graphContainer)).to eq(true)
yAxisLabels = @personal_trackers.getYAxisLabels()
numYAxisLabels = @graphInfo["yAxisLabels"].length
for i in 0...numYAxisLabels
# puts yAxisLabels[i]
expect(yAxisLabels[i]).to eq(@graphInfo["yAxisLabels"][i])
end
click(:css, @personal_trackers.tableButton)
waitForPageToFinishLoading()
end
def pdfTest()
@nav_menu.navigate(@baseNav)
!45.times{ break if (@personal_trackers.isPDFButtonDisplayed?() == true); sleep 1 }
expect(@personal_trackers.isPDFButtonDisplayed?()).to eq(true)
#--------------------------------------------------------------------------
#-- 02/13/2015 - jnakama
#-- With moving of PDF to DocumentCompositionServices PDF document is no
#-- longer opened in a seperate window, therefore commenting out this
#-- section until we find a way to detect PDF document was downloaded
#--------------------------------------------------------------------------
#@personal_trackers.clickPDFButton()
#
#switchWindowToWindowHandleLast()
#
#!45.times{ break if (@personal_trackers.hasEmbeddedPDF?() == true); sleep 1 }
#expect(@personal_trackers.hasEmbeddedPDF?()).to eq(true)
#
#closeBrowser()
#switchWindowToWindowHandleFirst()
#
#@nav_menu.navigate(@baseNav)
end
#Local Functions
def addEntry(entryMap)
@personal_trackers.clickAddEntryButton()
waitForPageToFinishLoading()
setEntryValues(entryMap)
expect(getPrimaryHeader()).to eq(@expectedHeaders["add"])
@entry_form.clickSaveButton()
waitForPageToFinishLoading()
end
def addAndVerifyEntry(fields, entryMap, expectIndex)
expectCount = @personal_trackers.getCount() + 1
addEntry(entryMap)
verifyEntry(fields, entryMap, expectCount, expectIndex)
end
def editEntry(entryMap, row)
@personal_trackers.clickNthRow(row)
waitForPageToFinishLoading()
expect(getPrimaryHeader()).to eq(@expectedHeaders["edit"])
setEntryValues(entryMap)
@entry_form.clickSaveButton()
waitForPageToFinishLoading()
end
def checkSaveStateInForm(expectedEntryMap, row)
@personal_trackers.clickNthRow(row)
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
expectedEntryMap.each {|key, value|
fieldValue = getValueInField(key)
expectedValue = numeric?(value) ? value.to_f : value
testValue = numeric?(fieldValue) ? fieldValue.to_f : fieldValue
expect(testValue).to eq(expectedValue)
}
@entry_form.clickCancelButton()
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
end
def editAndVerifyEntry(fields, entryMap, row, expectIndex)
expectCount = @personal_trackers.getCount()
editEntry(entryMap, row)
verifyEntry(fields, entryMap, expectCount, expectIndex)
end
def verifyEntry(fields, entryMap, expectCount, expectIndex)
!MAX_WAIT_LOOPS.times { break if (@personal_trackers.getCount() == expectCount); sleep WAIT_LOOP_SLEEP_TIME }
expect(@personal_trackers.getCount()).to eq(expectCount)
rowData = @personal_trackers.getRowValuesForSection(expectIndex)
rowData.each { | key, value |
if(entryMap[key] != nil)
if(fields[key]["type"] === "slider")
expectedValue = entryMap[key].to_s + " out of 10"
testValue = value;
else
expectedValue = numeric?(entryMap[key]) ? entryMap[key].to_f : entryMap[key]
testValue = numeric?(value) ? value.to_f : value
end
expect(testValue).to eq(expectedValue)
end
}
if entryMap["time"] == nil
expect(rowData["Date Entered"]).to start_with(entryMap["date"])
else
expect(rowData["Date Entered"]).to eq(entryMap["date"] + " " + entryMap["time"])
end
checkSaveStateInForm(entryMap, expectIndex)
end
def checkingInlineError(errMsg)
#Verify that the error message section header is displayed
!MAX_WAIT_LOOPS.times{ break if (@error.isErrorSummaryElementPresent(@formName)); sleep WAIT_LOOP_SLEEP_TIME }
#Verify the error message is displayed
expect(@error.isErrorMessageDisplayed(@formName, errMsg)).to eq(true)
end
#start on form page
def boundaryTest(name, min, max, delta)
prevValue = getValueInField(name)
#assume true for personal trackers cause it works out for its cases, but to do it correctly should pass correct isRequired value
expectedError = getShortFieldLabel(name, true).gsub(/:/, "") + " is outside the expected range. Please enter a value between " + min + " and " + max + "."
minTestVal = nil
maxTestVal = nil
if(delta.to_s.index(".") == nil)
minTestVal = (min.to_i - delta).to_s;
maxTestVal = (max.to_i + delta).to_s;
testVals = [minTestVal, maxTestVal, (max.to_i - delta).to_s + "1", (min.to_i + 0.5).to_s]
else
minTestVal = (min.to_f - delta).to_s;
maxTestVal = (max.to_f + delta).to_s;
testVals = [minTestVal, maxTestVal, (max.to_f - delta).to_s + "1", max.split(".")[0] + "5.0"]
end
testVals.each{ |val|
editField(name, val)
fieldValue = getValueInField(name)
if fieldValue.to_f == val.to_f
@entry_form.clickSaveButton()
waitForPageToFinishLoading()
checkingInlineError(expectedError)
else
expect(fieldValue).not_to eq(val)
end
}
editField(name, prevValue)
end
def textareaMaxLengthTest(name, maxLength, hasCounter)
testString = Array.new(maxLength){[*'0'..'9', *'a'..'z', *'A'..'Z'].sample}.join
if hasCounter == true
counterText = getTextForElement(:css, "span[ng-if='characterCounter']")
expect(counterText).to eq(maxLength.to_s + " characters left")
end
editField(name, testString + "a")
fieldText = getValueInField(name)
expect(fieldText).to eq(testString)
if hasCounter == true
counterText = getTextForElement(:css, "span[ng-if='characterCounter']")
expect(counterText).to eq("0 characters left")
end
end
def requiredFieldTest(name)
prevValue = getValueInField(name)
expectedError = getShortFieldLabel(name, true).gsub(/:/, "") + " field is required."
clearField(name)
@entry_form.clickSaveButton()
waitForPageToFinishLoading()
#Verify that the error message section header is displayed
# !MAX_WAIT_LOOPS.times{ break if (@error.isErrorSummaryElementPresent(@formName)); sleep WAIT_LOOP_SLEEP_TIME }
#Verify the error message is displayed
expect(@error.isErrorMessageDisplayed(@formName, expectedError)).to eq(true)
#Clear the previously tested area to prepare for the next test
editField(name, prevValue)
end
def deleteEntry(row)
@personal_trackers.clickNthRow(row)
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
@entry_form.clickDeleteButton()
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
@modal.clickYesButton()
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
end
def deleteAndVerifyEntry(row)
expectCount = @personal_trackers.getCount() - 1
rowText = @personal_trackers.getTextForRow(row)
deleteEntry(row)
!MAX_WAIT_LOOPS.times{ break if ( @personal_trackers.getCount() == expectCount); sleep WAIT_LOOP_SLEEP_TIME }
expect(@personal_trackers.getCount()).to eq(expectCount)
for i in 1..expectCount
expect(@personal_trackers.getTextForRow(i)).not_to eq(rowText)
end
end
def deleteModalTest()
@nav_menu.navigate(@baseNav)
@personal_trackers.clickNthRow(1)
waitForPageToFinishLoading()
@entry_form.clickDeleteButton()
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
expect(@modal.getConfirmationHeading()).to eq("Confirmation")
expect(@modal.getConfirmationMessage()).to eq("Are you sure you want to remove this entry? Select YES to remove the entry or NO to return to the entry screen.")
@modal.clickNoButton()
!MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
expect(getPrimaryHeader()).to eq(@expectedHeaders["edit"])
@entry_form.clickDeleteButton()
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
expect(@modal.getConfirmationHeading()).to eq("Confirmation")
expect(@modal.getConfirmationMessage()).to eq("Are you sure you want to remove this entry? Select YES to remove the entry or NO to return to the entry screen.")
@modal.clickYesButton()
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
expect(getPrimaryHeader()).to eq(@expectedHeaders["summary"])
end
def unsavedWarningModalTests()
unsavedWarningModalTest(@siblingFeature)
unsavedWarningModalTest(@siblingSection)
end
def unsavedWarningModalTest(nav)
@nav_menu.navigate(@baseNav)
@personal_trackers.clickNthRow(1)
waitForPageToFinishLoading()
#make more generic?
testInput = "unsaved modal test"
editField("Note", testInput)
@nav_menu.navigate(nav)
#CREATE MODAL TEXT CONSTANTS
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
expect(@modal.getConfirmationHeading()).to eq("Confirmation")
expect(@modal.getConfirmationMessage()).to eq("You have not saved your changes. You may continue without saving or return to the entry screen.")
@modal.clickReturnButton()
@nav_menu.navigate(nav)
!MAX_WAIT_LOOPS.times{ break if (@modal.getConfirmationHeading() == "Confirmation"); sleep WAIT_LOOP_SLEEP_TIME }
expect(@modal.getConfirmationHeading()).to eq("Confirmation")
expect(@modal.getConfirmationMessage()).to eq("You have not saved your changes. You may continue without saving or return to the entry screen.")
@modal.clickContinueButton()
waitForPageToFinishLoading()
# @nav_menu.navigate(nav)
@nav_menu.navigate(@baseNav)
@personal_trackers.clickNthRow(1)
waitForPageToFinishLoading()
!MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["edit"]); sleep WAIT_LOOP_SLEEP_TIME }
expect(getValueInField("Note")).not_to eq(testInput)
@entry_form.clickCancelButton()
waitForPageToFinishLoading()
# !MAX_WAIT_LOOPS.times{ break if (getPrimaryHeader() == @expectedHeaders["summary"]); sleep WAIT_LOOP_SLEEP_TIME }
end
def setDateRangeAndValidate(numOfDaysAgoFromDate, numOfDaysAgoToDate, expectedRowText)
toDate = getDateNthDaysAgo(numOfDaysAgoToDate, "%m/%d/%Y") #set it to Today
fromDate = getDateNthDaysAgo(numOfDaysAgoFromDate, "%m/%d/%Y")
@date_filter.setDateRangeAndFilter(fromDate, toDate)
!MAX_WAIT_LOOPS.times{ break if (@personal_trackers.getCount() == 1); sleep WAIT_LOOP_SLEEP_TIME }
expect(@personal_trackers.getCount()).to eq(1)
expect(@personal_trackers.getTextForRow(1)).to eq(expectedRowText)
expect(getFocusedElementText().strip).to eq(expectedRowText)
end
end
=end