To test a Silverlight application, configure the application and your testing environment.
Preparing In-Browser Silverlight Applications
Preparing and Embedding the Application Package
Compile and pack your tested Silverlight application to a package file (.xap) from which a wrapper web page will load the application.
The following example demonstrates embedding of supported and unsupported Silverlight applications into a wrapper web page via an object
HTML element:
HTML
<!-- Embedding a Silverlight application from a .xap file (supported) -->
<div id="silverlightControlHost">
<object width="640" height="480" data="data:application/x-silverlight-2," type="application/x-silverlight-2" >
<param name="source" value="MySilverlightApp.xap"/>
<param name="minRuntimeVersion" value="4.0.50826.0" />
<a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>
</div>
<!-- Embedding a Silverlight application from a .xaml file (unsupported) -->
<div id="silverlightControlHost">
<object width="640" height="480" data="data:application/x-silverlight-2," type="application/x-silverlight-2" >
<param name="source" value="MySilverlightApp.xaml"/>
<param name="minRuntimeVersion" value="4.0.50826.0" />
<a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>
</div>
Preparing Applications With the tcAgPatcher Utility
By default, TestLeft can access internal objects of Silverlight applications, their properties and methods without any preparations if the following requirements are met:
-
The application is running in Internet Explorer.
TestLeft cannot access internal of applications running in Internet Explorer 11. See below. -
The application’s wrapper web page loads the application package file (.xap) directly from a web server.
-
The application’s wrapper web page is loaded via the HTTP protocol.
If one of these requirements is not met, or if TestLeft cannot access the applications internals automatically for other reasons, you have to use the tcAgPatcher utility to prepare the application This can happen, if —
-
A Silverlight application is signed.
-
A Silverlight is running on a server that requires Negotiate, MTLM, or some other authentication.
-
A Silverlight application is running in Internet Explorer 11.
To prepare a Silverlight application for testing and make its internal objects available to TestLeft manually, use the tcAgPatcher utility.
The utility is shipped with TestLeft. It is located in the <TestLeft>\Open Apps\Silverlight\tcAgPatcher.exe folder.
tcAgPatcher does not change the application’s source code. It adds TestLeft libraries directly to the application’s .xap file and registers them in the application’s manifest (AppManifest.xaml) inside the .xap file. These are the same libraries that TestLeft injects into non-prepared Silverlight applications during the test run.
Do not copy tcAgPatcher to another folder. tcAgPatcher works only from its default installation folder. |
tcAgPatcher has the following command-line syntax:
tcAgPatcher.exe [/silent] [/noBackup] xapfile
The command-line arguments are as follows:
-
/silent - (Optional) Do not show any error or warning messages.
-
/noBackup - (Optional) Do not create a backup copy of the application’s .xap file. If this argument is not specified, tcAgPatcher creates the application’s backup copy with the .bak extension in the same folder.
-
xapfile - The fully-qualified name of the Silverlight application’s .xap file to process.
You need to replace the .xap file on the application server with the processed .xap file. Do not process a local copy of the .xap file stored in your web browser’s cache. |
Note for signed Silverlight applications: To test a signed Silverlight application processed with tcAgPatcher, launch TestLeft with the /agpatcheroff command-line argument:
Without this argument, your application’s digital signature will be invalid during the testing process.
Preparing Your Web Browsers
-
To make sure the tested application is retrieved from the original location rather than from the cache, clear the browser’s cache before testing your application.
-
We recommend that you launch your Silverlight application in your web browser by using the following method:
.NET:
Driver.Applications.RunBrowser
Java:
driver.getApplications().runBrowser()
If you start your application in another way, and the URL of the page where the tested application will run is specified in the browser’s command line or in the browser settings, TestLeft will not be able to access the application’s internals automatically.
This can happen if —
-
You launch the browser from the command line and specify the test page’s URL as a command-line parameter.
-
The tested web page is specified in the browser settings and is opened automatically when the browser launches.
To avoid the problem, use any of the following approaches —
-
Launch the browser using the
RunBrowser
method:C#
using SmartBear.TestLeft;
…
public void Test()
{
string URL = "https://smartbear.com/samples/testcomplete/silverlight/orders.html";
IWebBrowser browser = Driver.Applications.RunBrowser(BrowserType.IExplorer, PlatformType.Any, URL);
…
}Visual Basic .NET
Imports SmartBear.TestLeft
…
Public Sub Test()
Dim URL As String = "https://smartbear.com/samples/testcomplete/silverlight/orders.html"
Dim browser As IWebBrowser = Driver.Applications.RunBrowser(BrowserType.IExplorer, PlatformType.Any, URL)
…
End SubJava
import com.smartbear.testleft.*;
import com.smartbear.testleft.testobjects.*;
import com.smartbear.testleft.testobjects.web.*;
…
@Test
public void Test() throws Exception{
String url = "https://smartbear.com/samples/testcomplete/silverlight/orders.html";
WebBrowser browser = driver.getApplications().runBrowser(BrowserType.IExplorer, PlatformType.any, url);
…
} -
Change the launch settings so that the browser first opens the about:blank page and then navigates to the desired web page from the test. Your test may look like the following —
C#
using SmartBear.TestLeft;
…
public void Test()
{
// Calling your custom procedure for launching the browser
…
// Getting the browser process and opening the test page
IWebBrowser browser = Driver.Find<IWebBrowser>(new WebBrowserPattern()
{
ObjectIdentifier = "iexplore"
});
browser.ToUrl("https://smartbear.com/samples/testcomplete/silverlight/orders.html");
…
}Visual Basic .NET
Imports SmartBear.TestLeft
…
Public Sub Test()
// Calling your custom procedure for launching the browser
…
// Getting the browser process and opening the test page
Dim browser As IWebBrowser = Driver.Find(Of IWebBrowser)(New WebBrowserPattern() With {
.ObjectIdentifier = "iexplore"
})
browser.ToUrl("https://smartbear.com/samples/testcomplete/silverlight/orders.html")
…
End SubJava
import com.smartbear.testleft.*;
import com.smartbear.testleft.testobjects.*;
import com.smartbear.testleft.testobjects.web.*;
…
@Test
public void Test() throws Exception{
// Calling your custom procedure for launching the browser
…
// Getting the browser process and opening the test page
WebBrowser browser = (WebBrowser) driver.find(WebBrowser.class, new WebBrowserPattern() {{
ObjectIdentifier = "iexplore";
}});
browser.toUrl("https://smartbear.com/samples/testcomplete/silverlight/orders.html");
…
} -
Prepare your Silverlight application for testing using the tcAgPatcher utility as it is described above.
-
Preparing Cross-Domain Silverlight Applications
-
Create a crossdomain.xml configuration file with the following contents and place the file in the root directory of the web site where the tested Silverlight application’s package file (.xap) resides:
XML
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>For more information on this file, see the MSDN Library.
-
In the application manifest file (AppManifest.xml) of your Silverlight project, set the
ExternalCallersFromCrossDomain
attribute of theDeployment
element to “ScriptableOnly”.XML
<Deployment xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ExternalCallersFromCrossDomain="ScriptableOnly"
...
>
...
</Deployment>By default, the application manifest file is generated when you are building your Silverlight project. If the file is not generated, make sure that the “Generate Silverlight manifest file” option is enabled in the project’s settings:
-
Right-click the project node in Visual Studio’s Solution Explorer and select Properties from the context menu.
-
In the Project Properties window, switch to the Silverlight tabbed page.
-
Select the Generate Silverlight manifest file check box and specify a manifest file template (by default, it is AppManifest.xml).
For more information on setting the
ExternalCallersFromCrossDomain
attribute in the manifest file, see the MSDN Library. -
-
In the source code of the application’s wrapper web page, set the
enableHtmlAccess
parameter of the Silverlight plugin hosting the tested Silverlight application to true.The way Silverlight application developers can change the
enableHtmlAccess
parameter depends on the way the application is embedded into the wrapper web page.If the application is embedded into the web page by using an HTML
object
element:-
Open the application’s wrapper web page in an editor.
-
Locate the
object
element that is used to embed the Silverlight application. -
Locate or add the child
param
element named enableHtmlAccess and set the parameter’s value totrue
as shown in the following example:HTML
<div id="silverlightControlHost">
<object width="640" height="480" data="data:application/x-silverlight-2," type="application/x-silverlight-2" >
<param name="source" value="MySilverlightApp.xap"/>
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="enableHtmlAccess" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>
</div> -
Save the changes.
If the application is added to the web page by using JavaScript functions:
-
Open the web page or JavaScript file containing the application’s functions in an editor.
-
Locate the
Silverlight.createObject
orSilverlight.createObjectEx
function call that is used to embed the Silverlight application. -
Locate or add the
enableHtmlAccess
property in the function’s parameter list and set its value totrue
as shown in the following example:JavaScript
Silverlight.createObject(
"MyApplication.xap",
document.getElementById("silverlightControlHost"),
"silverlightControl",
{
width: "640",
height: "480",
version: "4.0.50826.0",
enableHtmlAccess: true
},
{ },
null,
null
);
// -- or --
Silverlight.createObjectEx({
source: "MyApplication.xap",
parentElement: document.getElementById("silverlightControlHost"),
id: "silverlightControl",
properties: {
width: "640",
height: "480",
version: "4.0.50826.0",
enableHtmlAccess: true
},
events: {}
}); -
Save the changes.
For more information on setting the
enableHtmlAccess
parameter of the Silverlight plugin, see the MSDN Library. -
-
Include the <TestLeft>\Open Apps\Silverlight\tcAgAgent15.dll assembly in your Silverlight project in Visual Studio.
-
Append the following call to the
Startup
event handler code:C#
AutomatedQA.TestComplete.AgAgent.Core.AgAgentLoader.LoadAgent(); -
Rebuild the application. After that, you need to process the generated application package file (.xap) with the tcAgPatcher.exe command-line utility in the manner described above. This will enable extended support for Silverlight controls in your application.
Preparing Out-Of-Browser Silverlight Applications
To enable TestLeft to recognize objects in out-of-browser Silverlight applications, configure TestLeft UI Automation engine so that it provides access to Silverlight objects. To do this, add the MicrosoftSilverlight
item to the list of supported UI Automation classes:
C#
…
public void Test()
{
Driver.Options.UIAutomation.AddWindow("MicrosoftSilverlight");
…
}
Visual Basic .NET
…
Public Sub SilverlightTest()
Driver.Options.UIAutomation.AddWindow("MicrosoftSilverlight")
…
End Sub
Java
…
@Test
public void SilverlightTest() throws Exception{
driver.getOptions().getUIAutomation().addWindow("MicrosoftSilverlight");
…
}
TestLeft will recognize visual objects for which UI Automation provides access in your Silverlight application. Get those objects in tests by using the UIAPattern
class.