Handling JavaScript Popups and Browser Dialogs

Applies to TestComplete 12.60, last modified on September 17, 2018

TestComplete supports common JavaScript popups and browser dialogs used in web applications, such as alerts, confirmations, input prompts, basic authentication dialogs and others. TestComplete detects these dialogs in all the supported web browsers and lets you automate them as part of your tests.

Although popup dialogs are implemented differently in different browsers, TestComplete identifies them and their UI elements in a browser-independent fashion, which helps with cross-browser testing.

Alerts

An alert box is displayed using the JavaScript alert function. It is a simple message box with a text message and the OK button.

An alert box in Internet Explorer
An alert box in Internet Explorer
An alert box in Firefox
An alert box in Firefox

TestComplete records and plays back interactions with JavaScript alert boxes using the Alert test object and its child UI objects. It also lets you get the alert text using the Alert.Message property.

The following example demonstrates how you can automate an alert box:

Keyword test that closes JavaScript alert box

JavaScript, JScript

function Test()
{
  var url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/";

  Browsers.Item(btIExplorer).Run(url);
  var page = Sys.Browser("*").Page(url);
  page.Wait();

  var link = page.FindChild("contentText", "Show Alert", 10);
  link.Click();

  Log.Message("Alert text: " + page.Alert.Message);
  page.Alert.Button("OK").Click();
}

Python

def Test():
  url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/"

  Browsers.Item[btIExplorer].Run(url)
  page = Sys.Browser("*").Page(url)
  page.Wait()

  link = page.FindChild("contentText", "Show Alert", 10)
  link.Click()

  Log.Message("Alert text: " + page.Alert().Message)
  page.Alert().Button("OK").Click()

VBScript

Sub Test
  Dim url, page, link

  url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/"
  Browsers.Item(btIExplorer).Run url
  Set page = Sys.Browser("*").Page(url)
  page.Wait()

  Set link = page.FindChild("contentText", "Show Alert", 10)
  link.Click

  Log.Message "Alert text: " + page.Alert.Message
  page.Alert.Button("OK").Click
End Sub

DelphiScript

procedure Test;
var url, page, link;
begin
  url := 'http://downloads.smartbear.com/samples/testcomplete10/dialogs/';

  Browsers.Item[btIExplorer].Run(url);
  page := Sys.Browser('*').Page(url);
  page.Wait();

  link := page.FindChild('contentText', 'Show Alert', 10);
  link.Click;

  Log.Message('Alert text: ' + page.Alert.Message);
  page.Alert.Button('OK').Click;
end;

C++Script, C#Script

function Test()
{
  var url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/";

  Browsers["Item"](btIExplorer)["Run"](url);
  var page = Sys["Browser"]("*")["Page"](url);
  page["Wait"]();

  var link = page["FindChild"]("contentText", "Show Alert", 10);
  link["Click"]();

  Log["Message"]("Alert text: " + page["Alert"]["Message"]);
  page["Alert"]["Button"]("OK")["Click"]();
}

Confirmations

A confirmation box is displayed using the JavaScript confirm function. It contains a text message and two buttons, OK and Cancel.

A confirmation box in Internet Explorer
A confirmation box in Internet Explorer
A confirmation box in Chrome
A confirmation box in Chrome

TestComplete records and plays back interactions with confirmation boxes using the Confirm test object. It also lets you get the confirmation message text using the Confirm.Message property.

The following example demonstrates how you can automate a confirmation box:

Keyword test that closes confirmation box

JavaScript, JScript

function Test()
{
  var url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/";

  Browsers.Item(btIExplorer).Run(url);
  var page = Sys.Browser("*").Page(url);
  page.Wait();

  var btn = page.FindChild("contentText", "Show Confirm", 10);
  btn.Click();

  Log.Message("Message text: " + page.Confirm.Message);
  page.Confirm.Button("OK").Click();
}

Python

def Test():
  url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/"

  Browsers.Item[btIExplorer].Run(url)
  page = Sys.Browser("*").Page(url)
  page.Wait()

  btn = page.FindChild("contentText", "Show Confirm", 10)
  btn.Click()

  Log.Message("Message text: " + page.Confirm().Message)
  page.Confirm().Button("OK").Click()

VBScript

Sub Test
  Dim url, page, btn

  url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/"
  Browsers.Item(btIExplorer).Run url
  Set page = Sys.Browser("*").Page(url)
  page.Wait()

  Set btn = page.FindChild("contentText", "Show Confirm", 10)
  btn.Click

  Log.Message("Message text: " + page.Confirm.Message)
  page.Confirm.Button("OK").Click
End Sub

DelphiScript

procedure Test;
var url, page, btn;
begin
  url := 'http://downloads.smartbear.com/samples/testcomplete10/dialogs/';

  Browsers.Item[btIExplorer].Run(url);
  page := Sys.Browser('*').Page(url);
  page.Wait();

  btn := page.FindChild('contentText', 'Show Confirm', 10);
  btn.Click;

  Log.Message('Message text: ' + page.Confirm.Message);
  page.Confirm.Button('OK').Click;
end;

C++Script, C#Script

function Test()
{
  var url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/";

  Browsers["Item"](btIExplorer)["Run"](url);
  var page = Sys["Browser"]("*")["Page"](url);
  page["Wait"]();

  var btn = page["FindChild"]("contentText", "Show Confirm", 10);
  btn["Click"]();

  Log["Message"]("Message text: " + page["Confirm"]["Message"]);
  page["Confirm"]["Button"]("OK")["Click"]();
}

Prompts

A prompt box is displayed using the JavaScript prompt function. It contains a message asking the user to enter a value, an input field and two buttons, OK and Cancel.

A prompt box in  Chrome browser
A prompt box in Chrome

TestComplete records and plays back interactions with prompt boxes using the Prompt test object and its child UI objects. It also lets you get the prompt text using the Prompt.Message property.

The following examples demonstrate how you can automate a prompt box:

Keyword test that automates prompt box

JavaScript, JScript

function Test()
{
  var url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/";
  Browsers.Item(btIExplorer).Run(url);
  var page = Sys.Browser("*").Page(url);
  page.Wait();

  var btn = page.FindChild("contentText", "Show Prompt", 10);
  btn.Click();

  Log.Message("Prompt: " + page.Prompt.Message);
  Log.Message("Default value: " + page.Prompt.Value);
  page.Prompt.Value = "John Smith";

  // You can also enter the value using SetText method of the input field object
  // page.Prompt.Textbox("Value").SetText("John Smith");

  page.Prompt.Button("OK").Click();
}

Python

def Test():
  url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/";
  Browsers.Item[btIExplorer].Run(url)
  page = Sys.Browser("*").Page(url)
  page.Wait()

  btn = page.FindChild("contentText", "Show Prompt", 10)
  btn.Click()

  Log.Message("Prompt: " + page.Prompt().Message)
  Log.Message("Default value: " + page.Prompt().Value)
  page.Prompt().Value = "John Smith"

  # You can also enter the value using SetText method of the input field object
  # page.Prompt.Textbox("Value").SetText("John Smith")

  page.Prompt().Button("OK").Click()

VBScript

Sub Test
  Dim url, page, btn

  url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/"

  Browsers.Item(btIExplorer).Run(url)
  Set page = Sys.Browser("*").Page(url)
  page.Wait()

  Set btn = page.FindChild("contentText", "Show Prompt", 10)
  btn.Click

  Log.Message("Prompt: " + page.Prompt.Message)
  Log.Message("Default value: " + page.Prompt.Value)

  page.Prompt.Value = "John Smith"
  ' You can also enter the value using SetText method of the input field object
  ' page.Prompt.Textbox("Value").SetText("John Smith")

  page.Prompt.Button("OK").Click
End Sub

DelphiScript

procedure Test;
var url, page, btn;
begin
  url := 'http://downloads.smartbear.com/samples/testcomplete10/dialogs/';

  Browsers.Item[btIExplorer].Run(url);
  page := Sys.Browser('*').Page(url);
  page.Wait();

  btn := page.FindChild('contentText', 'Show Prompt', 10);
  btn.Click;

  Log.Message('Prompt: ' + page.Prompt.Message);
  Log.Message('Default value: ' + page.Prompt.Value);

  page.Prompt.Value := 'John Smith';
  // You can also enter the value using SetText method of the input field object
  // page.Prompt.Textbox('Value').SetText('John Smith');

  page.Prompt.Button('OK').Click;
end;

C++Script, C#Script

function Test()
{
  var url = "http://downloads.smartbear.com/samples/testcomplete10/dialogs/";
  Browsers["Item"](btIExplorer)["Run"](url);
  var page = Sys["Browser"]("*")["Page"](url);
  page["Wait"]();

  var btn = page["FindChild"]("contentText", "Show Prompt", 10);
  btn["Click"]();

  Log["Message"]("Prompt: " + page["Prompt"]["Message"]);
  Log["Message"]("Default value: " + page["Prompt"]["Value"]);
  page["Prompt"]["Value"] = "John Smith";

  // You can also enter the value using SetText method of the input field object
  // page["Prompt"]["Textbox"]("Value")["SetText"]("John Smith");

  page["Prompt"]["Button"]("OK")["Click"]();
}

Login Dialogs

If a web application uses Basic authentication, the browser displays a login dialog box where the user can enter the user name and password for accessing the application.

The login dialog in Internet Explorer
The login dialog in Internet Explorer
The login dialog in  Chrome
The login dialog in Chrome

TestComplete records and plays back actions with login dialogs using the Login test object and its child UI objects. You can get and set the user name using the Login.UserName property; to set a password, use the Login.Password property.

TestComplete does not record the login and password if they are populated by the browser’s password manager. You need to manually enter the login and password in order for them to be recorded.
The Login.Password property has write-only access. You cannot use it to get the password text.

Below is a sample test that automates the login dialog:

Keyword test that automates login dialog

JavaScript, JScript

function Test()
{
  var url = "http://secure.example.com";

  Browsers.Item(btIExplorer).Run(url);
  var page = Sys.Browser("*").Page(url);

  page.Login.UserName = "username";
  page.Login.Password = "password";
  // Or you can enter the user name and password using the text box object methods
  // page.Login.TextBox("UserName").SetText("username");
  // page.Login.TextBox("Password").SetText("password");

  page.Login.Button("OK").Click();

  page.Wait();
}

Python

def Test():
  url = "https://login.yahoo.com"

  Browsers.Item[btIExplorer].Run(url)
  page = Sys.Browser("*").Page(url)

  page.Login().UserName = "username"
  page.Login().Password = "password"
  # Or you can enter the user name and password using the text box object methods
  # page.Login.TextBox("UserName").SetText("username")
  # page.Login.TextBox("Password").SetText("password")

  page.Login().Button("OK").Click()

  page.Wait()

VBScript

Sub Test
  Dim url, page

  url = "http://secure.example.com"
  Browsers.Item(btIExplorer).Run url
  Set page = Sys.Browser("*").Page(url)

  page.Login.UserName = "username"
  page.Login.Password = "password"
  ' Or you can enter the user name and password using the text box object methods
  ' page.Login.TextBox("UserName").SetText("username")
  ' page.Login.TextBox("Password").SetText("password")

  page.Login.Button("OK").Click

  page.Wait
End Sub

DelphiScript

procedure Test;
var url, page;
begin
  url := 'http://secure.example.com/';

  Browsers.Item[btIExplorer].Run(url);
  page := Sys.Browser('*').Page(url);

  page.Login.UserName := 'username';
  page.Login.Password := 'password';
  // Or you can enter the user name and password using the text box object methods
  // page.Login.TextBox('UserName').SetText('username');
  // page.Login.TextBox('Password').SetText('password');

  page.Login.Button('OK').Click;

  page.Wait();
end;

C++Script, C#Script

function Test()
{
  var url = "http://secure.example.com";

  Browsers["Item"](btIExplorer)["Run"](url);
  var page = Sys["Browser"]("*")["Page"](url);

  page["Login"]["UserName"] = "username";
  page["Login"]["Password"] = "password";
  // Or you can enter the user name and password using the text box object methods
  // page["Login"]["TextBox"]("UserName")["SetText"]("username");
  // page["Login"]["TextBox"]("Password")["SetText"]("password");

  page["Login"]["Button"]("OK")["Click"]();

  page["Wait"]();
}

Form Resubmission Confirmations

When the user reloads a web page that contains a filled out form previously submitted to the server, the web browser asks the user whether to resubmit the form.

The Resend information message in Internet Explorer
The Resend information message in Internet Explorer
The Resend information message in Chrome
The Resend information message in Chrome

TestComplete records and plays back interactions with form resubmission confirmations using the Confirm test object. The “Resend” button is identified as Button("OK") (or buttonOk if Name Mapping is used), the “Cancel” button - as Button("Cancel") (or buttonCancel in Name Mapping). The button object names are predefined and do not depend on the UI languages used in the browser or operating system.

The following example demonstrates how you can interact with a form resubmission confirmation and cancel the action.

Keyword test that automates form resubmission confirmation

JavaScript, JScript

function Resubmit()
{
  var url = "http://www.useragentstring.com/";
  Browsers.Item(btIExplorer).Run(url);
  var page = Sys.Browser().Page(url);

  // Submit the form
  page.NativeWebObject.Find("value", "Analyze", "input").Click();
  page.Wait();

  // Refresh the page and choose not to resubmit the form
  page.Keys("^[F5]");
  page.Confirm.Button("Cancel").Click();
}

Python

def Resubmit():
  url = "http://www.useragentstring.com/";
  Browsers.Item[btIExplorer].Run(url);
  page = Sys.Browser().Page(url);

  # Submit the form
  page.NativeWebObject.Find("value", "Analyze", "input").Click();
  page.Wait();

  # Refresh the page and choose not to resubmit the form
  page.Keys("^[F5]");
  page.Confirm.Button("Cancel").Click();

VBScript

Sub Resubmit
  Dim url, page

  url = "http://www.useragentstring.com/"
  Browsers.Item(btIExplorer).Run url
  Set page = Sys.Browser.Page(url)

  ' Submit the form
  page.NativeWebObject.Find("value", "Analyze", "input").Click
  page.Wait

  ' Refresh the page and choose not to resubmit the form
  page.Keys("^[F5]")
  page.Confirm.Button("Cancel").Click
End Sub

DelphiScript

procedure Resubmit;
var url, page;
begin
  url := 'http://www.useragentstring.com/';
  Browsers.Item(btIExplorer).Run(url);
  page := Sys.Browser.Page(url);

  // Submit the form
  page.NativeWebObject.Find('value', 'Analyze', 'input').Click;
  page.Wait;

  // Refresh the page and choose not to resubmit the form
  page.Keys('^[F5]');
  page.Confirm.Button('Cancel').Click;
end;

C++Script, C#Script

function Resubmit()
{
  var url = "http://www.useragentstring.com/";
  Browsers["Item"](btIExplorer)["Run"](url);
  var page = Sys["Browser"]()["Page"](url);
  // Submit the form
  page["NativeWebObject"]["Find"]("value", "Analyze", "input")["Click"]();
  page["Wait"]();

  // Refresh the page and choose not to resubmit the form
  page["Keys"]("^[F5]");
  page["Confirm"]["Button"]("Cancel")["Click"]();
}

OnBeforeUnload Messages

Web pages that handle the onbeforeunload event display a confirmation message when they attempt to close the page or navigate to another page.

The OnBeforeUnload message in Internet Explorer
The OnBeforeUnload message in Internet Explorer
The OnBeforeUnload message in Chrome
The OnBeforeUnload message in Chrome

TestComplete identifies and records interactions with the OnBeforeUnload message using the Confirm test object. The “Leave page” option is identified as Button("OK") (or buttonOk if Name Mapping is used) and the “Stay on page” option - as Button("Cancel") (buttonCancel in Name Mapping). The button object names are predefined and do not depend on the UI language used in the browser or operating system.

The following example demonstrates how you can select the “Leave page” option in the OnBeforeUnload dialog box.

Keyword test that automates OnBeforeUnload confirmation

JavaScript, JScript

function Test()
{
  var url = "http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm";
  Browsers.Item(btIExplorer).Run(url);
  var browser = Sys.Browser();
  var page = browser.Page(url);

  var link = page.FindChild("contentText", "Click here to navigate to www.microsoft.com.", 5);
  link.Click();

  Log.Message("OnBeforeUnload message: " + page.Confirm.Message);
  page.Confirm.Button("OK").Click(); // Click "Leave page"
}

Python

def OnBeforeUnload():
  url = "http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm";
  Browsers.Item[btIExplorer].Run(url);
  browser = Sys.Browser();
  page = browser.Page(url);

  link = page.FindChild("contentText", "Click here to navigate to www.microsoft.com.", 5);
  link.Click();

  Log.Message("OnBeforeUnload message: " + page.Confirm.Message);
  page.Confirm.Button("OK").Click(); # Click "Leave page"

VBScript

Sub Test
  Dim url, browser, page, link

  url = "http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm"
  Browsers.Item(btIExplorer).Run url
  Set browser = Sys.Browser
  Set page = browser.Page(url)

  Set link = page.FindChild("contentText", "Click here to navigate to www.microsoft.com.", 5)
  link.Click

  Log.Message("OnBeforeUnload message: " + page.Confirm.Message)
  page.Confirm.Button("OK").Click ' Click "Leave page"
End Sub

DelphiScript

procedure Test;
var url, browser, page, link;
begin
  url := 'http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm';
  Browsers.Item[btIExplorer].Run(url);
  browser := Sys.Browser;
  page := browser.Page(url);

  link := page.FindChild('contentText', 'Click here to navigate to www.microsoft.com.', 5);
  link.Click();

  Log.Message('OnBeforeUnload message: ' + page.Confirm.Message);
  page.Confirm.Button('OK').Click; // Click "Leave page"
end;

C++Script, C#Script

function Test()
{
  var url = "http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm";
  Browsers["Item"](btIExplorer)["Run"](url);
  var browser = Sys["Browser"]();
  var page = browser["Page"](url);

  var link = page["FindChild"]("contentText", "Click here to navigate to www.microsoft.com.", 5);
  link["Click"]();

  Log["Message"]("OnBeforeUnload message: " + page["Confirm"]["Message"]);
  page["Confirm"]["Button"]("OK").Click(); // Click "Leave page"
}

Checking if a Dialog Is Displayed

In keyword tests, you can use the If Object operation to check if a specific JavaScript or a browser dialog is currently displayed. For example, the test below checks for an alert dialog and presses the dialog’s OK button on success:

Keyword test checks if alert is displayed

In scripts, you should call the page’s WaitAlert(), WaitConfirm(), WaitPrompt() or WaitLogin() method to wait for the respective dialog. These methods delay the script execution until the given dialog appears or the specified time limit is reached. To determine whether the dialog was displayed, check the Exists property of the returned object.

JavaScript, JScript

if (page.WaitAlert(10000).Exists) // Wait 10 sec for an alert to appear
{
  page.Alert.Button("OK").ClickButton();
}

Python

if (page.WaitAlert(10000).Exists): # Wait 10 sec for an alert to appear
  page.Alert.Button("OK").ClickButton();

VBScript

If page.WaitAlert(10000).Exists Then ' Wait 10 sec for an alert to appear
  page.Alert.Button("OK").ClickButton
End If

DelphiScript

if page.WaitAlert(10000).Exists then // Wait 10 sec for an alert to appear
begin
  page.Alert.Button('OK').ClickButton;
end;

C++Script, C#Script

if (page["WaitAlert"](10000)["Exists"]) // Wait 10 sec for an alert to appear
{
  page["Alert"]["Button"]("OK")["ClickButton"]();
}

The timeout parameter is compulsory. There are also two special timeout values:

  • 0 - check to see if the dialog exists only once and then resume the script execution;

  • -1 - an infinite timeout.

For more information, see Checking Whether an Object Exists and Waiting for an Object, Process or Window Activation.

Samples

TestComplete includes a sample test project that demonstrates how to automate JavaScript popups and browser dialogs:

<TestComplete Samples>\Web\Dialogs Sample

Note: If you do not have the sample, download the TestComplete Samples installation package from the https://support.smartbear.com/downloads/testcomplete/samples/ page of our website and run it.

For more information on this sample, refer to the Web Testing Samples help topic.

Possible Issues

Recent Firefox versions support the multiprocess mode. If this mode is active, then depending on the Firefox configuration TestComplete may fail to recognize the web dialogs. They will not be displayed in the object tree of the Object Browser, and TestComplete will not record user actions on them. To work around the problem, disable the multiprocess mode in Firefox.

See Also

Testing Web Applications
Common Tasks for Web Testing
Alert Object
Confirm Object
Prompt Object
Login Object

Highlight search results