Validating Data Tables in Eggplant Functional
Data tables are a common component of many desktop, web, and even some mobile applications. All industries use software that leverages data tables in some way, such as for displaying hospital patient lists, financial data, or open job opportunities.
Common use cases surrounding data tables include validating that the content displayed by a data table in an application UI mirrors the content of the underlying database, or validating that a record submitted in a form persists and is displayed later in the application's data table. Data table validation with the Eggplant Functional test automation tool is powerful and leverages the advanced scripting and database access capabilities of SenseTalk.
Data Table Validation in Action
The following video shows examples of Eggplant Functional validating different aspects of distinct data tables.
Tech Talk
These SenseTalk commands, functions, variables, and syntax are used in data table validation, and are referenced in the above video.
Scripts for Data Table Validation
The following scripts can be used for validating tables.
//The script leverages functions stored in the RetrieveRecords script
put RetrieveRecords.fromUI into ActualRecords
log "The actual records are:"
LogAllRecords ActualRecords
log "-------------------------------------------------------"
put RetrieveRecords.fromDB into ExpectedRecords
log "The expected records are:"
LogAllRecords ExpectedRecords
If ActualRecords = ExpectedRecords
LogSuccess "The record sets match."
else
LogError "The record sets don't match."
End If
If item 5 of ActualRecords = item 5 of ExpectedRecords
put item 5 of ActualRecords
put item 5 of ExpectedRecords
LogSuccess "The 5th records match."
End If
on LogAllRecords RecordList
repeat with each item of RecordList
Log it
end repeat
end LogAllRecords
function fromUI
//This function uses the View element on the screen to identify each row of data in the table.
put everyImageRectangle ("ViewIdentifier") into Rows
put imageRectangle ("ItemIDColumn") into ItemIDLoc
put imageRectangle ("NameColumn") into NameLoc
put imageRectangle ("ProductLineIDColumn") into ProductLineIDLoc
repeat with each Row of Rows
set theTop to Row's top
set theBottom to Row's bottom
put readText (ItemIDLoc's left,theTop,NameLoc's left,theBottom) into theItemID
put readText (NameLoc's left,theTop,ProductLineIDLoc's left,theBottom) into theName
insert (ItemID:theItemID,Name:theName) into TableRead
end repeat
return TableRead
end fromUI
function fromDB
set myDB to (type:"odbc", DSN:"mySQLDB", user:"root", password:"eggPlant")
put table "table_demo_data2" of myDB into myDBTable
return the records of myDBTable
end fromDB
put ((food:"Grilled Cheese",drink:"milk"),(food:"Hamburger",drink:"soda")) into ActualRecords
put ((food:"Hamburger",drink:"soda"),(food:"Grilled Cheese",drink:"lemonade")) into ExpectedRecords
repeat with each myRecord of ExpectedRecords
Assert that ActualRecords contains myRecord with warning
end repeat
put imageRectangle ("SymbolColumn") into SymbolColumnLoc
put foundImageInfo()'s imageLocation into StartLoc
put imageRectangle ("NameColumn") into NameColumnLoc
put imageRectangle ("PriceColumn") into PriceColumnLoc
put (StartLoc,(SymbolColumnLoc's right,StartLoc's y + 42)) into SymbolRead
put ((NameColumnLoc's left, StartLoc's y),(NameColumnLoc's right,StartLoc's y + 42)) into NameRead
put ((PriceColumnLoc's left, StartLoc's y),(PriceColumnLoc's right,StartLoc's y + 42)) into PriceRead
repeat until endofTable is true
put readtext(SymbolRead) into Symbol
if Symbol is empty then
set endofTable to true
exit repeat
end if
put readtext(NameRead) into Name
put readtext(PriceRead) into Price
add ((0,45),(0,45)) to SymbolRead
add ((0,45),(0,45)) to NameRead
add ((0,45),(0,45)) to PriceRead
insert (Symbol:Symbol, Name:Name, Price:Price) after TableRead
end repeat
Log "The table records are:"
Log TableRead
Set the searchRectangle to ("FIRSTColumn",(imageLocation("LASTColumn")'s x, the remotescreensize's y))
repeat until imageFound (text:"EG629610")
MoveTo the remoteScreenRectangle's center
ScrollWheelDown 4
end repeat
set the searchRectangle to ()
put foundImageInfo()'s imageRectangle into RowLoc
put imageRectangle ("LASTColumn") into LASTColumnLoc
put (LASTColumnLoc's left, RowLoc's Top - 20, imageLocation("DOBColumn")'s x, RowLoc's Bottom + 20) into LastNameReadArea
Assert that readText(LastNameReadArea) is "DemoCardio"
put readText ("RecordNumberUL","RecordNumberLR") into PatientPRN
Set the searchRectangle to ("FIRSTColumn",(imageLocation("LASTColumn")'s x, the remotescreensize's y))
WaitFor 10, text:PatientPRN
put imageRectangle ("GasolinePerGallonColumn") into GasolineLoc
put imageLocation(image:"UnitedStatesColumn",searchRectangle:(GasolineLoc's topLeft,(GasolineLoc's right, the remoteScreenSize's height))) into ColumnLoc
DoubleClick (ColumnLoc's x,imageLocation ("MayRow")'s y)
TypeText ControlKey,"c"
put the remoteClipBoard into DollarValue
Log "The scraped value is"&&DollarValue&period
If DollarValue is greater than 2.000 then
LogSuccess "The value is greater than 2 dollars."
else
LogWarning "The value is equal to or less than 2 dollars."
End If
put imageRectangle ("RowNumColumn") into RowLoc
put foundImageInfo()'s imageLocation into StartUpperLeft
put imageRectangle ("ScrollProgressColumn") into ScrollLoc
put (StartUpperLeft,(RowLoc's right,StartUpperLeft's y + 38)) into RowRead
put ((ScrollLoc's left, StartUpperLeft's y),(ScrollLoc's right,StartUpperLeft's y + 38)) into ScrollRead
repeat until the number of items of Records is greater than 50
set EndReached to false
repeat until EndReached is true
put readText(RowRead) into RowValue
if RowValue is empty then
set EndReached to true
exit repeat
end if
put readText(ScrollRead) into ScrollValue
add ((0,37),(0,37)) to RowRead
add ((0,37),(0,37)) to ScrollRead
insert (RowNumber:RowValue,ScrollProgressPercent:ScrollValue) into Records
end repeat
TypeText PageDown
wait 3
put the last item of Records into LastReadRecord
put LastReadRecord's ScrollProgressPercent into LastReadPercent
put imageRectangle (text:LastReadPercent)'s bottom into LastLocY
put ((RowLoc's left,LastLocY + 14),(RowLoc's right,LastLocY + 51)) into RowRead
put ((ScrollLoc's left, LastLocY + 14),(ScrollLoc's right,LastLocY + 51)) into ScrollRead
end repeat
log records
set myDB to (type:"odbc", DSN:"mySQLDB", user:"root", password:"eggPlant")
put table "table_demo_data" of myDB into myDBTable
put the records of myDBTable into myDBData
set the searchRectangle to ("TableUL","TableLR")
repeat with each myRecord of myDBData
WaitFor 5, text:myRecord's Time
WaitFor 5, text:myRecord's Gene_Copies
end repeat