Oct
26
2008
--

Difference between IE6 and IE7

This article will take you over various differences between Internet Explorer 6 (IE6) and Internet Explorer 7 (IE7). These difference would be from QTP automation perspective

Difference #1 - Alert dialog title

IE6 alert dialog title is “Microsoft Internet Explorer” and for IE7 the alert dialog title is “Windows Internet explorer”

IE7 Alert dialog

IE7 Alert dialog


IE6 Alert dialog

IE6 Alert dialog

Both windows can be easily supported at the same time in QTP by using regular expression “(Windows|Microsoft) Internet Explorer”. The statement is true whether we use object repository or descriptive programming.

Difference #2 - Multiple Tab windows

IE7 supports multiple tabs. QTP 9.2 supports IE7 but with tabs setting disabled, QTP 9.5 supports testing IE7 with tabs also. So is there any other difference because of these tabs? Because if IE7 tabs QTP now identifies the each tab as a Browser and not the whole window as a Browser. The statement would become clear when we look at the below code

Maximizing IE6 Browser

Dim hwndBrw
hwndBrw = Browser("Browser").GetROProperty("hwnd")
Window("hwnd:=" & hwndBrw).Maximize

But when we run the same code in IE7 QTP throws below error

The operation cannot be performed error

The operation cannot be performed error

The reason for this error is that the handle of the window that we receive is not the main browser window handle but the sub window handle (TAB) which cannot be maximized. To receive the main window handle we would need to use Windows API

Dim hwndBrw, hwndWindow
hwndBrw = Browser("Browser").GetROProperty("hwnd")
 
Const GA_ROOT = 2
'Declare Function GetAncestor Lib "user32.dll" (ByVal hwnd As Long, ByVal gaFlags As Long) As Long
Extern.Declare micLong, "GetMainWindow", "user32" ,"GetAncestor",micLong, micLong
 
'Get the main IE window handle
hwndWindow = Extern.GetMainWindow(hwndBrw, GA_ROOT)
Window("hwnd:=" & hwndWindow).Maximize

Note: Above code will work on IE6 as well

Difference #3 - Certificate Security error

The way IE7 present certificate error is completely different from way IE6 does it

IE6 Certificate security error

IE6 Certificate security error


IE7 Certificate security error

IE7 Certificate security error

Handling the IE7 security error is as easy as it gets

If Browser("KnowledgeInbox").Page("IE7").Link("text:=Continue to this website \(not recommended\)\.").Exist Then
     Browser("KnowledgeInbox").Page("IE7").Link("text:=Continue to this website \(not recommended\)\.").Click
End If

or

If Browser("KnowledgeInbox").Page("IE7").Link("html id:=overridelink").Exist Then
    Browser("KnowledgeInbox").Page("IE7").Link("html id:=overridelink").Click
End If

These are 3 key differences IMO which needs to taken care of in case both IE6 and IE7 needs to be supported by QTP scripts.

Rating: 0.0/10 (0 votes cast)
Oct
25
2008
--

When to change QTP Web ReplayType Setting?

What is ReplayType?

ReplayType is QTP Web Add-in setting. It can be used to change how the events are replayed on the browser. There are two modes of ReplayType

  • Events (1) - Replay of events using the Browser methods (something similar to DOM).
  • Mouse (2) - Replay of events using the mouse and keyboard simulation.

When to change ReplayType?

Use of ReplayType can be best explained by a below example. In below sample textbox we need to type in any value and see that the button gets enabled when there some text in the textbox and disabled when there is not text. Click on the button will display the values inside the textbox.

Scenario #1

Type in textbox and enable the button:

Now when we record using QTP on this page we would get the below code

Browser("KnowledgeInbox").Page("ReplayType").WebEdit("txtReplayType").Set "KnowledgeInbox"
Browser("KnowledgeInbox").Page("ReplayType").WebButton("Type and enable me").Click

But on replay QTP will throw a “Object is disabled” error as shown in below image

Object is disabled error during replay

Object is disabled error during replay

QTP throws above error as the ReplayType of the Web Add-in is set to 1 (Events). Let’s look at the HTML code related to the text box

<input onkeyup="EnableThis(this, document.getElementsByName('btnReplayType')[0])" name="txtReplayType" size="20" type="text" />

The input text box has a handler for onkeyup event. Now with ReplayType as 1 (events) QTP just goes and sets the value of textbox which means non of the events get fired. Now there are two possible solutions for the same. We will look at each of them one by one

Solution #1
Firing the handled event manually using FireEvent. In this approach we need to look into the HTML and see which event has a handler and fire the same after changing the value of the textbox

Browser("KnowledgeInbox").Page("ReplayType").WebEdit("txtReplayType").Set "KnowledgeInbox"
Browser("KnowledgeInbox").Page("ReplayType").WebEdit("txtReplayType").FireEvent "onkeyup"
Browser("KnowledgeInbox").Page("ReplayType").WebButton("Type and enable me").Click

Solution #2
Changing ReplayType to 2 (Mouse) will instruct QTP to replay the Set method using Keyboard and mouse simulation. This would simulate a actual user typing into the browser

Setting.WebPackage("ReplayType") = 2 'Mouse
Browser("KnowledgeInbox").Page("ReplayType").WebEdit("txtReplayType").Set "KnowledgeInbox"
Browser("KnowledgeInbox").Page("ReplayType").WebButton("Type and enable me").Click
Setting.WebPackage("ReplayType") = 1 'Events

We saw two of the few possible solutions. Which one should be used then? IMO we should first go for Solution #1 and if that does not work then for Solution #2. The reason behind that opinion is that ReplayType=2 means that your workstation needs unlocked when QTP replays the script.

Scenario #2
I won’t demonstrate the 2nd scenario but would just give overview of the same. For some links which opens popups, when clicked manually popup would open. But when we do the same thing through QTP it IE popup blocker would show a popup blocked message. IE popup blocker is said to be smart enough to determine if a user clicked a link or it was done through code and based on the same the popup is blocked or shown. Changing ReplayType to 2 (Mouse) would simulate a user click and not give the popup bar.

Rating: 0.0/10 (0 votes cast)
Oct
20
2008
--

How to check for error pages (Page cannot be displayed)?

This is the first article in my “How to?” series and i hope there would be many more that i would be able to write in future.

While testing any web application there can be instances where the application is not available or you get a page cannot be displayed, internal server error etc and need to take some action based on the same. I present a very generic function which returns True/False whether there is an error on the page or not. The best part about this function is that it is compatible with both IE and FF

'Author: Tarun Lalwani
'Website: www.KnowledgeInbox.com
 
'Function: IsPageCannotBeDisplayed
'Comments: To check if a Page cannot be displayed or some other keyword is present on the page
'Input:
'@Brw - QTP Browser Test object
'@PCD_Keyword - Keywords to be used for checking a page cannot
'				be displayed error.
'Return: True/False in case error has occurred
Public Function IsPageCannotBeDisplayed(oBrw, PCD_Keywords)
	Dim sUrl, sPageText, oPg
 
	IsPageCannotBeDisplayed = False
 
	If Not oBrw.Exist(0) Then Exit Function
 
	'Get the page object
	Set oPg = oBrw.Page("micclass:=Page")
 
	'A page might not exist when the dialog modal is present
	'in the browser
	If Not oPg.Exist(0) Then Exit Function
 
	sURL = oBrw.Page("micclass:=Page").GetROProperty("URL")
 
	'Special check for IE and FF URL checks
	If InStr(1, sURL, "shdoclc.dll", vbTextCompare) <> 0 or _
		InStr(1, sURL, "about:neterror?", vbTextCompare) <> 0 Then
		IsPageCannotBeDisplayed = True
	'IF IE then we will use HTML DOM to get the whole page text
	ElseIf InStr(1, oBrw.GetROProperty("version"),"internet explorer", vbTextCompare) Then
		sPageText = oPg.Object.documentElement.outerText
	Else
		'We now assume it is Firefox. So object property is not available
		'This approach won't work on IE
		sPageText = oPg.GetROProperty("outertext")
	End If
 
	Dim sKeyword
 
	For each sKeyword in PCD_Keywords
		'Check if our keyword exist on the page
		If InStr(1, sPageText , sKeyword, vbTextCompare) Then
			IsPageCannotBeDisplayed = True
			Exit Function
		End if
	Next
End Function
 
'Keywords for page cannot be displayed. Different application have different pages for
'page cannot be displayed. Make sure you a unique keyword is picked from the page
Dim PCD_Keywords
PCD_Keywords = Array("The page cannot be displayed", "Sorry page is not found", "Internal server error")
 
'Usage
'Msgbox IsPageCannotBeDisplayed(Browser("Mozilla Firefox Start"), PCD_Keywords)
Rating: 6.0/10 (6 votes cast)
Oct
12
2008
--

“The parameter is incorrect” error when typing into a WebEdit

Sometimes QTP throws a “The parameter is incorrect” error when setting a text in a WebEdit

The parameter is incorrect error

The parameter is incorrect error

Below is a test textbox to reproduce the issue

WebEdit with Max Length 4:

The error can be reproduced using below code

'Will work fine
Browser("KnowledgeInbox").Page("KnowledgeInbox").WebEdit("txtMaxTest").Set "1234"
 
'Will throw a parameter is incorrect error
Browser("KnowledgeInbox").Page("KnowledgeInbox").WebEdit("txtMaxTest").Set "12345"

There are two root causes of this issue

Root Cause #1
Trying to set a text in a textbox greater than it’s max length would raise the error. The sample textbox shown in this article has Max length of 4. That is the reason why the 2nd line of the code shown above throws an error

Root Cause #2
This root cause is specific to firefox browser. If ReplayType (in Tools->Options->Web (Tab) -> Advacned…(button)) is set to Mouse then an set operation on a WebEdit in Firefox will produce this error. The code below can be used to reproduce the error

'Will work fine
Setting.WebPackage("ReplayType") = 1 'Browser
Browser("KnowledgeInbox").Page("KnowledgeInbox").WebEdit("txtMaxTest").Set "1234"
 
Setting.WebPackage("ReplayType") = 2 'Mouse
'Will throw a parameter is incorrect error even when we type the same text
Browser("KnowledgeInbox").Page("KnowledgeInbox").WebEdit("txtMaxTest").Set "1234"
Rating: 8.9/10 (15 votes cast)
Sep
25
2008
--

Implementing elegant if else

A typical if else condition in VBScript would look like below

If (message = "ok") Then 
    Msgbox "I am calling ok"
Else
    Msgbox "I am calling not ok"
End if

VB provides a elegant function named IIf for such small if else conditions. The function can be easily witten in VBScript

Public Function IIf(ByVal pCondition, ByVal trueValue, ByVal falseValue)
    If pCondition Then
        IIf = trueValue
    Else
        IIf = falseValue
    End If
End Function

Now the same code be written in single line of code

Msgbox "I am calling " & IIf(message="ok","ok", "not ok")
Rating: 6.5/10 (11 votes cast)
Written by Tarun Lalwani in: VBScript | Tags: , , , , , , ,