The information in this topic applies to web tests that locate web objects by using internal identification properties provided by TestComplete and run in local environments.
This topic explains how TestComplete names objects of out-of-browser Silverlight applications exposed via the UI Automation engine and how you can address these objects in your tests.
Exploring Silverlight Applications in the Object Browser
Addressing Silverlight Objects Using Name Mapping
General Notes
Out-of-browser Silverlight applications are launched with a special helper utility - Microsoft Silverlight Out-of-Browser Launcher (sllauncher.exe). This utility contains the WebBrowser control which displays a wrapper page for the Silverlight application. So, out-of-browser Silverlight applications behave like ordinary desktop applications.
Addressing windows, controls and objects in applications is hierarchical. That is, to obtain an object of a Silverlight out-of-browser application, you should first obtain the sllauncher process and the page that hosts the tested application, then access the application itself and finally obtain the desired object. To learn the object hierarchy and names in the tested Silverlight application, you can explore it in the Object Browser(see the next section of this topic).
You can also learn the object names by recording actions over the desired objects and viewing the names in the recorded script or keyword test.
Moreover, an easy way to learn how a particular element can be addressed and to explore the element’s properties, fields and methods is to use the TestComplete target glyph:
-
Click the Display Object Spy button on the Tools toolbar.
-
In the Object Spy window, click the Drag the target to point to the object icon and drag its glyph () to the desired object. As you move the mouse pointer, a red frame appears around the element under the pointer. Release the mouse button over the desired element. TestComplete will display the element’s name, properties, methods and events in the Object Spy window.
Exploring Silverlight Applications in the Object Browser
When the tested Silverlight application is exposed by the UI Automation engine, TestComplete can obtain scripting access to the application’s visual objects and provide special properties and methods for working with these objects. You can easily learn what properties and methods are available to your tests by exploring the application in the Object Browser panel:
-
Launch your out-of-browser application.
-
Expand the node that corresponds to the sllauncher process and its child nodes in the Object Browser until you reach the node corresponding to the tested Silverlight application.
The objects of a Silverlight Application are displayed in the Object Browser with the icon. They are addressed by calling the
UIAObject()
method (see below). -
When you select the needed Silverlight object in the Object Browser, you can explore its properties and methods on the Properties and Methods tabbed pages of the Object Browser, respectively. Here, in the UI Automation group, you can see the properties and methods provided by the UI Automation engine.
Addressing Silverlight Objects Using Name Mapping
By default, TestComplete uses object names from the Name Mapping project item to refer to individual objects in a tested application. Using Name Mapping you can assign custom names to the application’s objects and then address mapped objects in your tests using these custom names instead of fully-qualified names.
You can see custom mapped names and aliases in the Name Mapping Editor:
Here, Mapped Objects and Aliases display the hierarchy of mapped objects and their aliases, respectively. The full name that can be used to refer to an object is displayed in the top right part of the Name Mapping editor. For example, in the image above you can see that you can refer to the ContactListBox object using the following name:
Note that the mapped name for this object is the following:
VBScript
NameMapping.Sys.sllauncher.wndAfx.ShellEmbedding.ShellDocObjectView.browser.Silverlight_Control.ContactListBox
The highlighted objects (wndAfx, ShellEmbedding, ShellDocObjectView and browser) are not crucial for our test, so we have excluded them from the path to the ContactListBox object in the Alias tree. This is one of the benefits of the aliases notation - shorter and more readable scripts.
For more information about using Name Mapping and aliases, see Name Mapping and Access Objects by Aliases.
Addressing Silverlight Objects Without Name Mapping
Your tests can work not only with applications and objects added to Name Mapping, but also with any other running applications, their windows and controls. These objects can be addressed by using a syntax that directly includes identification property values.
The sample code below demonstrates how you can refer to an object in your out-of-browser Silverlight application:
JavaScript, JScript
Sys.Process("sllauncher").Window("Afx:*", "*").Window("Shell Embedding").Window("Shell DocObject View").Window("Internet Explorer_Server").Page("*").Panel("silverlightControlHost").Object("sl").UIAObject("ContactListBox").Click();
Python
Sys.Process("sllauncher").Window("Afx:*", "*").Window("Shell Embedding").Window("Shell DocObject View").Window("Internet Explorer_Server").Page("*").Panel("silverlightControlHost").Object("sl").UIAObject("ContactListBox").Click();
VBScript
Call Sys.Process("sllauncher").Window("Afx:*", "*").Window("Shell Embedding").Window("Shell DocObject View").Window("Internet Explorer_Server").Page("*").Panel("silverlightControlHost").Object("sl").UIAObject("ContactListBox").Click
DelphiScript
Sys.Process('sllauncher').Window('Afx:*', '*').Window('Shell Embedding').Window('Shell DocObject View').Window('Internet Explorer_Server').Page('*').Panel('silverlightControlHost').Object('sl').UIAObject('ContactListBox').Click();
C++Script, C#Script
Sys["Process"]("sllauncher")["Window"]("Afx:*", "*")["Window"]("Shell Embedding")["Window"]("Shell DocObject View")["Window"]("Internet Explorer_Server")["Page"]("*")["Panel"]("silverlightControlHost")["Object"]("sl")["UIAObject"]("ContactListBox")["Click"]();
To learn the exact syntax for referring to a particular object, use the Object Browser - it always uses this syntax for object names.
Let’s have a closer look at this notation and its components.
-
The notation starts with the
Sys
object that represents the operating system. -
The next object,
Process("sllauncher")
, represents the launcher utility used to run the tested application in out-of-browser mode. -
The next four
Window
objects correspond to the parent windows of the embedded WebBrowser control. -
The
Page(URL)
object is the container web page that hosts the tested application. -
The next two objects,
Panel("silverlightControlHost")
andObject("sl")
, correspond to the tested application’s main object and web page element that contains it.- The first object,
Panel("silverlightControlHost")
, corresponds to theDIV
element of the web page. - The second,
Object("sl")
, corresponds to theOBJECT
element that embeds the Silverlight application. This is the main object of the tested application.
- The first object,
-
The other objects represent visual objects in the Silverlight application.
TestComplete uses the following syntax for these objects:
UIAObject
(ObjectIdentifier, [Index])Here, ObjectIdentifier is an identifier that is used to name a UI Automation element. This can be one of the following:
- The object name as it is specified in the tested application’s source code
- The UI Automation identifier (AutomationId) for the element. (If the object name is not specified.)
- The object’s class name. (If neither the object name, nor the Automation identifier is specified.)
To learn the identifier of the current object, refer to the
ObjectIdentifier
property.The Index parameter is used only if the object contains two or more child objects that have the same class name and caption. Also, the
WaitUIAObject
method can be used to address the objects exposed by the UI Automation engine. It is similar to theUIAObject
method, but delays the script execution until the specified visual object appears or until the specified timeout elapses.
For examples of this syntax used for objects in your tested Silverlight application, examine your application in the Object Browser. You can also copy this syntax from the Object Browser and paste it to your test in order not to type it manually.
Combining Mapped and Unmapped Object Names
You can combine aliases specified in Name Mapping and the UIAObject
notation when referencing the object hierarchy in tests. For example, you can use aliases for parent objects and the UIAObject
notation for child objects:
However, keep in mind that aliases must always precede the UIAObject
notation in the object hierarchy. Aliases cannot be used after the UIAObject
notation within the same statement. That is, the following statement is invalid:
See Also
Testing Out-of-Browser Silverlight Applications
Testing Silverlight Applications