Accessing the Database Data

Rapise comes with a Database query global object that allows you to send SQL queries to a database and then iterate through the results. You drag the 'Database' global object into the script editor and then use:

  • Database.DoAttach() - to make the database connection and specify the SQL query
  • Database.GetRowCount() - to verify that there is data
  • Database.DoSequential() - to loop through the dataset row by row
  • Database.GetValue() - to get that row's data

Here is a complete example:

var success = Database.DoAttach('Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=SpiraTest;Data Source=.', 'SELECT * FROM TST_PROJECT');
Tester.Assert('Successfully Connected', success);

var count = Database.GetRowCount();
Tester.Message(count);

//Loop through the rows
while(Database.DoSequential())
{
    var projectId = Database.GetValue("PROJECT_ID");
    var name = Database.GetValue("NAME");
    var description = Database.GetValue("DESCRIPTION");
}

Next we need to get the data from the user interface.

Verifying the Data in the UI

To verify the data in the user interface, we need to use the XPath approach outlined in this guide to dynamically access the rows of data in the HTML table that contains the data:

https://www.inflectra.com/Rapise/Guides/Working-with-HTML-Tables.aspx

You can then use the LEARN (CTRL+2) option to learn one of the cells in the datagrid and then adjust the XPATH of the learned object to actually point to the whole table.

Then you can use the following query to get all the rows in the table:

var rows = SeS('Table').DoDOMQueryXPath('./tr');
Tester.Message ("Rows count:"+rows.length);

Then for each row you can loop through all the cells to compare the data with that from the database query performed earlier:

// Extract all data from the Balance table
function ExtractTableData()
{
    // Array that will contain all rows
    var tableData = [];
    // Get all rows from the table
    var rows = SeS('Table')._DoDOMQueryXPath('./tr');
    Tester.Message("Rows count:"+rows.length);
    
    // Extract valuable data from the table into 'TableData' structure
    for(var i=2; i<rows.length-2; i=i+2)
    {
        var cells = rows[i]._DoDOMQueryXPath('./td');
        // Each row is a structure with fields: project-id, name, description
        // Create empty structure to contain row data
        var rowData={};
        // And fill it according to known structure
        if(cells.length>=3)
        {
            // Cell #1 - PROJECT_ID
            rowData.projectId = cells[1].GetInnerText();
            // Cell #2 - NAME
            rowData.name = cells[2].GetInnerText();
            // Cell #3 - DESCRIPTION
            rowData.description = cells[3].GetInnerText();
        }
        // Finally add the row to the array
        tableData.push(rowData);
    }
    return tableData;
}