Saturday, August 24, 2013

Fill page on application based on the object columns in excel

Option Explicit

Dim class_ConsDes, TCID, actParObj, RF, wizardpgsCnt
Set class_ConsDes = New consDes
Set RF = class_ConsDes.RS

''* If multiple step wizards on the functionality must be follow based on the no. of pages
''* Syntax: pageFill TCID, ParentObject, TestDataSheetID
TCID = "one"

''* Calling pageFill function to fill with data in "DataSheet" excel sheet in TCID row under ParentObject
''* Note: All Column Names of the DataSheet must be the exact object Names in shared OR
- Page Name = ExcelDatasheet
- ColumnName = object Name in Page as it is in OR
- TCID = Page fill with specific Data in DataSheet
 - ParentObject = under which Parent Object/Page data must be filled.

pageFill TCID, ParentObject, DataSheet


Class consDes
    Public Root, RS
    Sub class_Initialize()
        Root = "Path of SharedRepository.tsr"
        Set RS = CreateObject("Mercury.ObjectRepositoryUtil")
        RS.Load Root
    End Sub
    Sub class_Terminate()
        Set RF = Nothing
        Set RS = Nothing
    End Sub
End Class

Function pageFill(TCID, actParObj, sheetID)
    Dim varNames, varValues, objStr, mainParObj, objStr1, brw, brwName, pg, pgName, Brows, Pag, parObjStr, chos, lp, Iterator2, cho, pros, co, props
    Call getObjNamesValues(TCID, "C:\Users\QA_User\Desktop\PageData.xls", sheetID, varNames, varValues)
    objStr = actParObj.ToString
    Set mainParObj = actParObj.GetTOProperty("parent")
    objStr1 = mainParObj.ToString
   
    brw = Split(objStr1, " ")(1)
    brwName = Split(objStr1, " ")(0)
    pg =Split(objStr, " ")(2)
    pgName = split(objStr, " ")(0)
   
    Brows = brw&"("&""""&brwName&""""&")"
    Pag = pg&"("&""""&pgName&""""&")"
   
    parObjStr =  ""&Brows&"."&Pag&""
    Set chos = RF.GetChildren(parObjStr)
    'Set chos = RF.GetChildren("Browser(""WFN"").Page(""Process_HR_HireRe-hire"")")
   
    For lp = 1 To Ubound(varNames)-1 Step 1
        For Iterator2 = 0 To chos.count-1
            Set cho = chos.item(Iterator2)
    '        Print " " & " " & RF.GetLogicalName(cho)
            If UCase(Trim(varNames(lp))) = UCase(Trim(RF.GetLogicalName(cho))) Then
                Print RF.GetLogicalName(cho)
                Set props = Nothing
                Set co = Nothing
                Set props = cho.GetToProperties
                Set co = actParObj.childObjects(props)
                On Error Resume Next
                If co(0).Exist Then
                    If err.number = -2147467259 Then
                        On Error Goto 0
                        Exit For
                    End If
                End If
                On Error Goto 0
                If SynchroProperty(co(0), "height", 60) Then
                    If Operate(co(0), varValues(lp)) Then
                        reporter.ReportEvent micDone, "Operation on Object : "& co(0).getroproperty("name") &" is done", co(0).getroproperty("name") &" is successfully get entered data with function : pageFill"
                        Set props = Nothing
                        Set co = Nothing
                        Exit For
                    Else
                        reporter.ReportEvent micFail, "Operation on Object : "& co(0).getroproperty("name") &" is failed", co(0).getroproperty("name") &" is not successfully get entered data with function : pageFill"
                        Set props = Nothing
                        Set co = Nothing
                        Exit For                   
                    End If
                End If
            End If
        Next
    Next
End Function

Function Operate(cho, val)
    Dim cls
    cls = cho.getroproperty("micclass")
    Select Case cls
        Case "WebEdit":
            If cho.Exist(1) Then
                If Instr(1, val, "fn_")=1 Then
                    val = mid(val, 4, len(val))
                    Execute "Dim retval: retVal="&Cstr(val)
                    val = retval
                End If
                cho.Set val
                Wait 0,500
                cho.click
                cho.FireEvent "onmouseover"
                cho.FireEvent "onmouseclick"
                sendKeys "{DOWN}"
                sendKeys "{TAB}"
                Wait 0,500
                If IsNumeric(cho.getroproperty("value")) Then
                    If UCase(Trim(Ccur(cho.getroproperty("value")))) = UCase(Trim(Ccur(val))) Then
                        Operate = True   
                    Else
                        Operate = False
                    End If
                Else
                If UCase(Trim(cho.getroproperty("value"))) = UCase(Trim(val)) Then
                    Operate = True   
                Else
                    cho.click
                    cho.FireEvent "onmouseover"
                    cho.FireEvent "onmouseclick"
                    sendKeys val
                    cho.click
                    cho.FireEvent "onmouseover"
                    cho.FireEvent "onmouseclick"
                    sendKeys "{DOWN}"
                    sendKeys "{TAB}"
                    If UCase(Trim(cho.getroproperty("value"))) = UCase(Trim(val)) Then
                        Operate = True   
                    Else
                        Operate = False
                    End If
                    End If
                End If   
            End If
        Case "WebElement":
            If cho.Exist(1) Then
                ItemPick_ComboBox cho, val
                Wait 0,500
                If Instr(cho.getroproperty("outerhtml"), "value="""&val&"") > 0 Then
                    Operate = True   
                Else
                    Operate = False
                End If   
            End If
        Case "WebRadioGroup":
            If cho.Exist(1) Then
                cho.Select val
                If cho.getroproperty("value") = val Then
                    Operate = True
                Else
                    Operate = False
                End If
            End If
        Case "WebCheckBox":
            If cho.Exist(1) Then
                cho.Set val
                If cho.getroproperty("value") = val Then
                    Operate = True
                Else
                    Operate = False
                End If
            End If
    End Select
End Function

Function getObjNamesValues(TCID, xlPath, sheetName, varNames, varValues)
    Dim xl, pageObjs(), xlSht, objsCnt, row, pageVals(), varcnt, setRow, varval
    Set xl = CreateObject("Excel.application")
    xl.Visible = True
    xl.Workbooks.Open xlPath
    Set xlSht = xl.Sheets(sheetName)
    objsCnt = xlSht.usedrange.columns.count
    ReDim Preserve pageObjs(objsCnt)
    For varcnt = 1 To objsCnt Step 1
        pageObjs(varcnt-1) = xlSht.Cells(1, varcnt)
    Next
    varNames = pageObjs
    ReDim Preserve pageVals(objsCnt)
    For setRow = 2 To xlSht.usedrange.rows.count Step 1
        If UCase(Trim(TCID)) = UCase(Trim(xlSht.cells(setRow, 1))) Then
            row = SetRow
            Exit For
        End If
    Next
    For varval = 1 To objsCnt Step 1
        pageVals(varval-1) = xlSht.Cells(row, varval)
    Next
    varValues = pageVals
    xl.ActiveWorkbook.Close
    xl.Quit
    Set xlSht = Nothing
    Set xl = Nothing
End Function

Function sendKeys(keyss)
    Dim wshell
    Set wshell = CreateObject("Wscript.Shell")
    wshell.SendKeys keyss
    Wait 0,500
    Set wshell = Nothing
End Function


"A good threat is worth a thousand tests" - Boris Beizer
There was an error in this gadget