Part 2
- We will start in the VBA module.(note: In the developer tab click Visual Basic ,It will open the VBA module.)
- In the Tools menu, click at the References sub menu and check the boxes to the below mentioned for adding references,
Visual Basic For Applications
Microsoft Excel 14.0 Object Library
OLE Automation
Microsoft Office 14.0 Object Library
Microsoft Forms 2.0 Object Library
Microsoft ActiveX Data Objects 6.1 Library
Microsoft HTML Object Library
Microsoft Internet Controls
Microsoft XML, v6.0
- In the project window ,click at VBAProject (MyOwnExcelframework.xlsm) highlighting the same, right click VBAProject (MyOwnExcelframework.xlsm),click Insert Module, It will insert a module with default name Module1.
- From the view menu click the Properties Window, change the name of the module from module1 to” BrowserFunctions”
- Hence forth all our browser handling code will reside in the module which has an extension .bas and is a text file. This will help us address the version control challenges.
- In the code window ,first declare the 2 public variables as below.
Public AppIE As WebBrowser
Public m As Integer
- Copy our first procedure for opening a browser window as below.
Public Sub Open_Browser()
10 On Error GoTo Error_Handler
20 Set AppIE = CreateObject(“InternetExplorer.Application”)
30 AppIE.Visible = True
40 Do While AppIE.Busy
50 DoEvents
60 Loop
70 Exit Sub
Error_Handler:
80 Handle_Error “Open_Browser”, Erl
End Sub
- The procedure for Navigation to any defined Url is as below , here the Url is parameterized, The Value for the Url will be passed thru the Excel worksheet Run Manager.
Public Sub Navigate_Url()
Dim strUrl As String
10 On Error GoTo Error_Handler
20 strUrl = Worksheets(“RunManager”).Cells(m, 5)
30 AppIE.navigate strUrl
40 Do While AppIE.Busy
50 Application.Wait (Now() + TimeValue(“00:00:2”))
60 Loop
70 Exit Sub
Error_Handler:
80 Handle_Error “Navigate_Url”, Erl
End Sub
- The procedure for entering text into a text box is as under. Here we have parameterized the textbox name and the text to be entered.
Public Sub Enter_TextByID()
Dim strTextboxname As String
Dim strTexttoEnter As String
10 On Error GoTo Error_Handler
20 strTextboxname = Worksheets(“RunManager”).Cells(m, 5)
30 strTexttoEnter = Worksheets(“RunManager”).Cells(m, 6)
40 AppIE.Document.getElementById(strTextboxname).Click
50 AppIE.Document.getElementById(strTextboxname).Value = strTexttoEnter
60 Exit Sub
Error_Handler:
70 Handle_Error “Enter_TextByID”, Erl
End Sub
- The procedure for simulating a button click is as under. Here we have parameterized the button name.
Public Sub Click_Button()
Dim strButtonName As String
10 On Error GoTo Error_Handler
20 strButtonName = Worksheets(“RunManager”).Cells(m, 5)
30 AppIE.Document.getElementById(strButtonName).Focus
40 AppIE.Document.getElementById(strButtonName).Click
50 Application.Wait (Now() + TimeValue(“00:00:1”))
60 Do While AppIE.Busy
70 Application.Wait (Now() + TimeValue(“00:00:2”))
80 Loop
90 Exit Sub
Error_Handler:
100 Handle_Error “Click_Button”, Erl
End Sub
- The procedure for Handling Error and Logging the same is as under.
Public Sub Handle_Error(strModule As String, intLineno As Integer)
Dim lngLastRow As Long
lngLastRow = Worksheets(“ErrorLog”).Cells(Worksheets(“ErrorLog”).Rows.Count, “A”).End(xlUp).Row
lngLastRow = lngLastRow + 1
Worksheets(“ErrorLog”).Cells(lngLastRow, 1) = lngLastRow – 1
Worksheets(“ErrorLog”).Cells(lngLastRow, 2) = Date
Worksheets(“ErrorLog”).Cells(lngLastRow, 3) = Time
Worksheets(“ErrorLog”).Cells(lngLastRow, 4) = strModule
Worksheets(“ErrorLog”).Cells(lngLastRow, 5) = intLineno
Worksheets(“ErrorLog”).Cells(lngLastRow, 6) = Err.Description
Worksheets(“ErrorLog”).Cells(lngLastRow, 7) = Err.Number
Worksheets(“ErrorLog”).Cells(lngLastRow, 8) = Err.Source
Worksheets(“ErrorLog”).Cells(lngLastRow, 9) = Err.HelpContext
End Sub
- I believe we have good nos. of procedures for POC on the automation of navigation , architecture and flexibility aspect of the framework .
- Its time to write our first test case.
- Go back to the excel worksheet, In Worksheet “Run Manager” create the Header as under in Bold.
Row 8 Column C Header label as “Procedure/Test Step Name“
Row 8 Column D Header label as “Exe“
Row 8 Column E Header label as “Control Identifier“
Row 8 Column F Header label as “Data to be Passed“
- Your Test case starts from Row nos 10. Test Step 1 as under..
Row 10 Column C as “Open_Browser”
Row 10 Column D as “Y”
- Test Step 2 as under.
Row 10 Column C as “Navigate_Url”
Row 10 Column D as “Y”
Row 10 Column E as “https://www.google.co.in“
- Test Step 3 as under.
Row 10 Column C as “Enter_TextByID”
Row 10 Column D as “Y”
Row 10 Column E as “gbqfq”
Row 10 Column F as “which is the best Automation framework”
- Test Step 4 as under.
Row 10 Column C as “Click_Button”
Row 10 Column D as “Y”
Row 10 Column E as “gbqfba”
- Test Step 5 as under.
Row 10 Column C as “Click_Button”
Row 10 Column D as “Y”
Row 10 Column E as “gbqfb”
- We have our first test case ready to execute.
- Just click at RunManager
Part1 | Part3 |
Great idea !!
Do you have more ideas for WPF and Mobile.
LikeLiked by 1 person
Hi,
will share functions for GUI soon…..
LikeLike
Cool… good if someone do not want to use standard commercial tool QTP … using native VBA/DOM …
LikeLiked by 1 person
using Comments for sharing reusable functions
Public Sub unzip_file()
Dim strmyCsvfile As Variant
Dim strcsvSavefilepath As Variant
Dim oApp As Object
‘file to be unzipped to be selected via a dialog box
strmyCsvfile = Application.GetOpenFilename
‘path where unzipped file is to be saved is parameterized this is to be taken from test
‘ case driver 5th column of respective row in the excel worksheet RunManager.
strcsvSavefilepath = Sheet3.Cells(m, 5)
‘windows shell utility for unzipping
Set oApp = CreateObject(“Shell.Application”)
oApp.Namespace(strcsvSavefilepath).CopyHere oApp.Namespace(strmyCsvfile).items
Set oApp = Nothing
End Sub
LikeLike
have followed the convention of commenting the code with explanation.
Procedure for selecting item from combo list in a browser.
To access elements in a browser we need to reference Microsoft HTML Object Library (mshtml.tlb),
Microsoft has provided this type library which when used in conjunction with Microsoft internet controls allow one to access all elements in a web page using DOM elements.
In the example below we have used getelementbyid method to access the elements.
Assumptions
Public AppIE As WebBrowser ‘ has been declared in the initial declarations section.
The browser has been initialized & navigated to the appropriate web page in an earlier sub or function.
Public Sub Select_Combo()
Dim strComboselection As String
Dim strTexttoEnter As String
strComboselection = Worksheets(“RunManager”).Cells(m, 5) ‘ id tag/attribute value of the combobox ,data to the variable is parameterized and is passed thru the run manager worksheet
strTexttoEnter = Worksheets(“RunManager”).Cells(m, 6) ‘ combo box Value to be set, data to the variable is parameterized and is passed thru the run manager worksheet
AppIE.Document.getElementById(strComboselection).Click
AppIE.Document.getElementById(strComboselection).Value = strTexttoEnter
Do While AppIE.Busy
Application.Wait (Now() + TimeValue(“00:00:2”))’ wait for 2 seconds
Loop
End Sub
LikeLike
have followed the convention of commenting the code with explanation.
Procedure for downloading File from internet.
Public Sub Save_File()
Dim strFileurl As String ‘ url of the file to be downloaded this can be parameterized or created programmatically
Dim strFilepath As String ‘path where the file is to be saved on the desktop the path must exist
Dim strFilename as String ‘ name of the file to be saved this can be parameterized or created programmatically
Dim strmyurl As String
strFileurl =Worksheets(“RunManager”).Cells(m, 5) ‘ data to the variable is parameterized and is passed thru the run manager worksheet
strFilepath =Worksheets(“RunManager”).Cells(m, 6) ‘ data to the variable is parameterized and is passed thru the run manager worksheet
strFilename =Worksheets(“RunManager”).Cells(m,7) ‘ data to the variable is parameterized and is passed thru the run manager worksheet
strmyurl = strFileurl
Dim WinHttpReq As XMLHTTP
Set WinHttpReq = CreateObject(“Microsoft.XMLHTTP”)
WinHttpReq.Open “GET”, strmyurl, False
WinHttpReq.send
strmyurl = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
‘HTTP_STATUS_OK for more on HTTP Status Codes visit https://msdn.microsoft.com/en-us/library/windows/desktop/aa383887(v=vs.85).aspx
Set ostream = CreateObject(“ADODB.Stream”)
ostream.Open
ostream.Type = 1
ostream.write WinHttpReq.responseBody
ostream.SaveToFile strFilepath, 1
ostream.Close
End If
‘housekeeping closing the objects
Set WinHttpReq = Nothing
Set ostream = Nothing
End Sub
LikeLike
My experience using Excel as the front end for test automation.
In 2005 I was running tests with WATIR with Ruby as the language and IE as the browser. I used VBA to generate the ruby scripts then fire off ruby in that script. Great, but manual testers were uncomfortable putting Ruby on their systems…
In 2006 I read a book “.NET Test Automation Recipes” and saw that I could attach IE as a com file and run it from Excel/VBA. Did that for several years. Disadvantage: limited to running in IE / Windows.
A few years ago I started using Selenium for VBA, and running 4 browsers from IE: FireFox, IE, Chrome, and PhantomJS. At the time Selenium VBA still had some issues. And, I was still stuck to running in Windows.
What I love about using Excel as the front end is a) you don’t have to build up a data input and reporting UI, and can do all your test management from the spreadsheet; b) you can set up your VBA classes or subs as a page description language so that the higher end scripts don’t have to be individually managed whenever an object has been modified; and c) you can pass off your finished test sheet to a manual tester to execute
More recently, I started using Python as the language, and Google Drive for the table/ui. Thus, I was able to break out of the Microsoft platform. The link from Python to Google Drive was slow but adequate.
So nowadays, I am back to using Excel, and all of my interface to Selenium is through com files I write in C#, and a very thin veneer in VBA. I typically write a Page Object Model utility in C#, and the high end scripts in C#; using the Excel for the parameters for data driven testing, and for the result output.
My next idea I would like to play around with is to use Excel / Mac to drive that model, with python as the back end language.
LikeLiked by 1 person