For Rapise training purposes we may need a simple desktop application that can be executed on any Windows version. What can be simpler than Windows Calculator?
Rapise 6.3 includes an experimental feature - new UIAutomation2 locator for UIAtuomation based desktop testing. Rather than specifying a path from the element tree root to the element this locator relies on built-in ability of UIAutomation to search for elements based on property values.
By default Rapise is using Java Accessibility Bridge by changing some Java Runtime Environment (JRE)-wide configuration files. So all applications using same JRE will use the modified version. If your goal is to have Accessibility only for test runs, then there is another way of doing that.
We are getting a lot of questions on how to use Rapise with Citrix and remotely accessed VMs . Here is the answer.
UI Automation is a default technology for testing desktop applications on Windows. If your application is not .NET or Java then Rapise will turn on UI Automation library during recording. If some elements in your application are not recognized or there are issues with playback of recorded steps then most likely your application is using custom UI controls. You may inspect those controls and send information to Rapise support team to get recommendations on how to proceed with testing.
To run a PowerShell script use Global.DoLaunch action.
Rapise supports testing of Java applications. In the case that application is launched using Java Web Start (JWS) additional steps are needed to successfully test an application.
This article is for those who test a desktop application via UI Automation library. Since desktop applications are frequently built using UI controls from different vendors and the number of such controls available on the market is pretty big (> 1k) - Rapise may not have out-of-the-box support for some controls in your application. For such cases Rapise offers a low level API to navigate UI Automation tree of elements inside an application and read/write element properties. In this tutorial we'll show how to use this API and quickly add minimal support for a custom control.
Windows may reboot because of various reasons. If you use a machine to run Rapise tests on regular basis than you want Rapise Launcher to be started automatically after system reboot.
The most reliable method that works with any Windows edition is to use Task Scheduler.
Every test has a User.js file and it is a place to put custom code and functions. This code must follow a few rules.
When Rapise starts execution of a test it sets working directory. If a test refers to a file using a relative path then the absolute path is calculated using the working directory.
In this short topic we describe how to get the value of a window title. The way depends on the application type.
There are different techniques one can use to close the application being tested from Rapise. The method to choose may depend on the application type.
Sometimes object location is unstable. The same object may be identified by different location path or XPath depending on application version or state.
Desktop applications may use window titles to show important information to a user. In some cases the title contains subject of a displayed entity or time. Since Rapise uses window title while searching for an object during playback - the search may fail. This complication may be resolved if you replace recorded windows title with a regular expression.
If an object can not be found at playback and it is obvious that object location has changed because of application update (differs from the case when location is dynamic!) then the best way to fix the test is simply relearn the object.
There are situations when object location attribute depends on the object data and it is not possible to record/learn all such objects in advance. In this case it may be convenient to calculate object location at playback time using FormatString and SetLocatorOpts actions of the RVL global object.
Rapise supports many standard UI controls out-of-the-box. And there are even more custom UI controls that are not supported. This is why Rapise has a well-defined way of adding extensions. To add support for a custom control first it makes sense to Spy on it. If you are dealing with Managed or Java applications you can Save Type Information for the control and also save UI tree structure/properties to a file. Send this information to Rapise team to get an advice on how to add support for the new control.
It is tricky do deal with WPF calendar control. Here we introduce a number of supplementatry functions to copy in your project and use to modify and read Calendar and DatePicker data.
Many views in Dynamics AX have several collapsible panes: General, Addresses, Contact information, etc. They are also known as Fast Tabs. Learn how to ensure that a Fast Tab is expanded and scrolled into view before entering data into the fields in this tab.
Requires Rapise 5.7+
More and more computers are equipped with High DPI displays. Though high resolution looks beautiful it may bring some issues. One of them is broken recording in Rapise.
Sometimes when you first install and open Rapise, the Start Page does not display correctly. This article explains the cause and solution to fix the issue.
When doing mouse click from Rapise it is sometimes need to use offset coordinates. You will learn:
1. When explicit coordinates are needed
2. How to determine them
Sometimes when you are using Rapise, you have to use external ActiveX or .NET objects to perform specific actions. You can get Rapise to display intellisense for those objects.
Sometimes it makes sense to automate certain steps of a Manual Test. If you prefer to implement automatic steps in RVL then include the AUTO helper function into your test.
If anything can be automated - it will be automated. You can use Rapise to automate day-to-day processes within a company to free your employees for more creative and productive job. Imagine you have data from third-party system in Excel file and you want to import it into Dynamics AX instance. You have a choice either to develop a software program that does the import via Dynamics AX API or you can create an automation script in Rapise.
A test may contain a lot of objects. If you want to locate an object in the object tree you may use the filter box.
When you record a test Rapise captures UI elements with which you interact and adds them as objects to the Object Tree of a test. Each object has a Type (Button, Text, Label, Tree, Grid, ...) and Location. Rapise uses Location attribute of an object to find it in the application during test execution.
When you execute a recorded test, sometimes, Rapise may not find some object on screen and display Object is not found error message in the report. If you see that the object is visible you can check if Rapise can find it or not without running the test.
If anything can be automated - it will be automated. You can use Rapise to automate day-to-day processes within a company to free your employees for more creative and productive job. Imagine you have data from third-party system in Excel file and you want to import it into Dynamics NAV instance. You have a choice either to develop a software program that does the import via Dynamics NAV API or you can create an automation script in Rapise.
If you need to make a copy of data in a Table/Grid object - you may simply save it to Excel file with a single function call.
Many views in Dynamics NAV have several collapsible panes: General, Lines, Invoice Details, etc. They are also known as Fast Tabs. Learn how to ensure that a Fast Tab is expanded and scrolled into view before entering data into the fields in this tab.
Requires Rapise 5.7+
Unified Service Desk (USD) is a hybrid application. It is a windows desktop application with embedded browser components. Follow this guide to setup a test automation framework for USD.
If you don't have some of the standard Window fonts installed (e.g. Courier New), when you try and launch Rapise, it will fail to open correctly. This article provides information on the problem and solution.
Sometimes when you are using Rapise, you see an error on the screen, or something doesn't work as expected. In that case, our support team will need a copy of the log file that is likely to contain the error message. This article explains how to get that log file.
When you do UI test automation and create a big enough test coverage the probability of having curtain portion of flaky tests increases. In many cases there is no reasonable way in terms of time and resources to mitigate all flakiness from the test coverage. In some cases even a flaky test may still be useful.
Sometimes when you try and install Rapise, you will see the error message "The Pipe is Being Closed", this article provides some solutions for this message.
Check that Dynamics NAV client is installed on a machine and launch it if it is not started yet with this simple function.
This article contains of overview of object recognition by UI automation tools in general and its implementation in Rapise in particular.
During the evaluation of Rapise 5.2 for Microsoft Dynamics AX testing, a customer collected the following tips and tricks from our support team (thanks Maxime!).
As described in a recent article, Microsoft Dynamics has been going through major changes in the past year, there are now many different products that all bear the 'Microsoft Dynamics' brand, including older legacy tools such as Dynamics AX, NAV, GP, SL and CRM and the new Dynamics 365 platform which has different modules (Sales, Operations, etc.). This article helps you know which tool you have when you need help from our Rapise support team.
We often get requests for ways to slow down the playback speed of Rapise so that the application under test (AUT) has time to respond. This article describes the different ways and provides suggestions as to when you should use each one.
A customer had a question - is there a way to suppress the DoSetText or DoSendkeys methods from sending their text to the logs. They didn't want users to see this text in the Rapise (and SpiraTest) logs because they contained sensitive information (e.g. passwords).
Rapise 4.0 supports the testing of Adobe AIR Flex applications using the
Adobe Integrated Runtime (AIR). Rapise can test applications using a
wide variety of different Flex controls and supports testing both Flex 3
and Flex 4 applications.
Rapise 4.0 supports the testing of Adobe Flex applications that are executed
by the Adobe Flash Player inside the Internet Explorer, Mozilla Firefox
or Google Chrome web browsers. Rapise can test applications using a
wide variety of different Flex controls and supports testing both Flex 3
and Flex 4 applications.
[We have depreciated support for testing Adobe Flex/Flash applications in Rapise 5.0 and later, so this article is provided for use by existing customers]
When you are testing a Java application using either Swing or AWT you may run into some issues due to the environment. This article collects some of these common cases and provides the recommended solutions.
When you install Rapise onto a computer that does not have Visual Studio or the Microsoft Script Debugger installed you will get a message to install the debugger. This article provides the download link to the necessary debugger.
When recording or playing back a test script on a new PC you may get an
error message that Rapise cannot find the path to "AllLibraries.json".This article provides instructions on how to fix the issue.
is a common situation that desktop applications written using Microsoft Windows Presentation Framework (WPF) will have complex layouts including tabs,
splitters and panels having custom grids and tables inside. This article provides help in dealing with such situations, including how to dynamically find items.
In the KB62 article - Accessing Files using Rapise
we explain how to access the names, versions and locations of files on the Windows file system. One customer asked - can we verify any file details other than version. This article provides sample code for accessing other information.
Sometimes when testing local/desktop applications you need to access the Windows registry to verify that keys exist or that keys have specific values. For example you may be testing that a DLL was successfully registered. This article provides information on the 'UsingRegistry' sample that comes with Rapise.
When you are using the global Rapise Spreadsheet object on a system running the 64-bit version of MS-Office, you may get an error attaching to the spreadsheet. This article describes the cause of the issue and provides a solution and workaround.
We had some customers that were looking to record some tests against Microsoft Word 2010. When testing against MS-Word 2010 there are actually two parts to the application:
- There is the application ribbon (the menus, navigation, etc.)
- There is the MS-Word text window where your content is actually displayed
This article provides some strategies for dealing with both areas.
One of the challenges using an automated testing tool is to organize things in a way that it is logical enough to find something quickly, structured enough to avoid duplication and simple enough to maintain and upgrade.
This statement is also true for Rapise objects. A common requirement is to deal with the same objects within a flow of different test cases. For instance, if an application has “Log In” functionality then many, many tests will require logging-in and logging-out. Each test will have this object in its own object tree. However this causes trouble if a change in the application affects the recognition of the Log In object. All of the test cases will need to be updated. In such situations it is much more convenient to have the “Log In” objects placed into their own file and re-used by other tests.
The most commonly used synchronization option to make Rapise wait until the application under test (AUT) is ready is the Global.DoSleep action. However having just a sleep may cause an unnecessary delay because we have to consider the maximum wait interval and it may be much less on average. Rapise includes some additional synchronization options for more fine grained control of the test case flow.
The Tester.EndTest() function in Rapise is described as: Marks end of a currently executed test. Calculates test results and performs finalization of test execution. We have found that some of our customers have been confused as what the purpose of this function is.
Suppose we have a situation that a thick-client (desktop) application under test (AUT) is based on a technology
that is too old or not completely supported by Rapise. Rapise has a number of
libraries for different types of apps. Usually Rapise finds the correct libraries using its auto-detection, but sometimes an application is unusual and
the auto-detection fails.
The built-in Spreadsheet object in Rapise makes it easy to read data from an MS-Excel spreadsheet. What happens if you want to write data back to the Excel sheet?
By default, the reports displayed within Rapise report back each test activity and assert statement as a line in the report with all of the activities and events being displayed in a single flat list regardless of whether they happen inside the main Test() function or a sub-function. This articles explains how you can extend the reporting.
When you use a DoX command in Rapise to perform a specific command (e.g. DoDOMChildrenCount() to get a number of object's DOM children), in the report an extra step -- assert -- is created during test execution. Sometimes you want to be able to call a function 'quietly' without it affecting the report.
In Rapise 2.2, "DoClick" behavior was changed, so we don't do a click but rather just position the mouse over the control and do API-level "click" event. However we provided a way to enable backward compatibility.
By default Rapise records user actions with a line commented out for each action. This articles describes how you can disable this behavior if you just want the script lines recorded on their own.
Anti-virus software is very sensitive to test automation tools. This is normal, because test automation tools usually do API, keyboard and mouse hooking to be able to record and playback user actions.
A Flex application requires some instrumentation to be ready for testing.
By default Flash player has security restrictions preventing Rapise from accessing the application contents.
Please, check the this help topic to learn more about Adobe Flex testing.
Sometimes it is necessary to examine the state of an object. For example, determine if Toggle Button is pressed or not, Radio/Check Button is checked or not, etc. This guide describes a couple of different ways of achieving this.
Sometimes Rapise will incorrectly recognize a GUI component. This guide outlines how you can manually change the object type captured during recording.
The context menu control is not natively supported by Rapise, but one can use a simple workaround.
The behavior of list and combobox controls in GUI applications sometimes require additional attention. This guide explains the different types of combobox controls and best practices for testing them in Rapise.
By design Rapise tries to record user activity on the highest possible level. This makes recorded actions more readable and universal. However that sometimes means that certain actions that a user performs won't be automatically picked up. This guide explains ways to handle situations when a specific user activity is not recorded.
This guide describes the different types of mouse events and how they are recorded in Rapise.
This guide describes the different ways that you can change the value of text label of an object.
Sometimes the application under test doesn't contain any learnable objects. In that case you may need to use the fallback of Analog Recording
. This guide describes how you perform analog recording.
This guide describes what simulated objects are and when they should be used.
There are several ways to find if something is already on the screen, this article explains some of the options.
When using Rapise for analog testing you need to use the key sequence CTRL+BREAK to start and stop the analog recorder. However some machines (particularly smaller laptops) do not have a BREAK or PAUSE (often the same function as BREAK) key. This article describes some solutiomns
By default the Rapise Flex library supports a wide variety of Flex controls which will be capable of testing the majority of application. However sometimes there will be an unknown objects which will be learnt as a generic object with FlexObject flavor. The article describes support for such custom Flex controls:
Sometimes when automating a test, you need to access the local Windows clipboard. This article describes how to access the Windows clipboard programmatically.
Sometimes you may have a button (or other control) that can have a different appearance depending on the different focus statuses.
For example, the default status without focus is a grey image, whereas when the mouse hovering over it becomes blue. Then when the mouse left button is held down on the button (and not released), the image changes to a red image.
Finally, when the button is activated using the tab key to tab into the button and the mouse is somewhere else, it has a fourth color.
This article discusses solutions for how to test these kinds of situation
Sometimes you need to be able to test the state of a specific Win32 object in Rapise to see if it is enabled, disabled, is activated, etc. This sample illustrates how to get the numeric and textual value of the object's state.
Simulated objects are found by looking at the parameters of the object (x number of pixels from the top of the window, y number of pixels from the left of the window, etc). One common question that has arisen is - during playback, does Rapise take into account screen resolution? If the resolution on the computer you run it on is different from the one it records on the location of the object will change relative to the number of pixels. So on the computer you record it on the top parameter might be 200 but on a different resolution it might be 180. Would Rapise recognize that the resolution is different and adjust for that?
This article describes how to access child objects of a Learned Java AWT/Swing object when using the Rapise Java library. Sometimes when you Learn a top-level object, you want to be able to programmatically query the object to locate the child objects that are visible in the Java SPY.
When you have a WPF or Silverlight application that has a list box (or other control that supports templates such as a Tree) that has an item template that contains
sub-controls, you may need to access the individual controls rather than just the entire list item. This article outlines the approach for doing this.
Sometimes you will have controls in a WPF or Silverlight application which use dynamic lists.
Depending on certain settings, the widgets in the list will appear in different places.
This means that a Learned Rapise object which works fine if its in the original ListBox location position is then played-back when it's displayed in another position, it will be ListBox or .
Unlike the XPath option with web testing, Rapise doesn't currently allow regular expressions (Regex) in locators stored inside the objects.js file. This article describes a way around the problem:
If you use the Global.DoLaunch(...) command to launch a Windows console application, it will return a process ID. This article provides some sample code for executing a console application and checking to make sure that the process is not still running.
When using Rapise to record test scripts against Windows, Java, Flex, or other thick client applications that have windows or objects whose names may change in between test runs, you will usually need to make changes to either the test script or the learned objects so that they can match correctly. This article outlines some suggested techniques for recording/playing back scripts against such applications.
If you try and record a test script in Rapise using just the 'Infragistics' library you will get the following error message:
C:\Program Files (x86)\Inflectra\Rapise\Engine\Recorder.js(285, 3) Microsoft JScript runtime error: 'ManagedObjectSelectableBehavior_OnMouseEvent' is undefined