Subscribe to Methods & Tools
if you are not afraid to read more than one page to be a smarter software developer, software tester or project manager!
Subscribe to Methods & Tools
if you are not afraid to read more than one page to be a smarter software developer, software tester or project manager!
Weâre excited to announce that Ranorex 6.2 is ready for you to download! In this release, weâve focused on providing you with an advanced technology support for desktop and mobile applications as well as on making it easier for teams with mixed skills to collaborate on test automation projects.Advanced Technology Support
Weâve made the support of innovative technologies a priority and now enable testing of Chromium-based frameworks in desktop apps and WKWebView objects in iOS apps.Chromium Embedded Framework (CEF) support
CEF is one of the most frequently used frameworks for embedding web content in desktop applications. Next to Googleâs native CEF implementation, we now also support testing of these Chromium-based frameworks:
The WKWebView class enables you to embed interactive web content in your iOS mobile applications. Using Ranorex 6.2, you can now test your embedded WKWebView objects.User Code Library
Sometimes, you need to add further functionality to your tests with user code. We understand that in a team with mixed skills, not everyone wants to code. Thatâs why weâve introduced the user code library with Ranorex 6.2. It gives you direct access to the user code methods your colleagues have previously created in a test automation solution, so you can add additional functionality to your tests without writing a single line of code.A quick overview of the workflow:
If youâre a developer or tester with programming skills, you can start by filling the user code library with user code methods. You can logically organize methods that relate to a specific workflow or application area. A tip: Add a description to each method. This makes it easier for your colleagues to find the right user code methodÂ .
As a tester in your team, you can directly access the library fromÂ the action table and select a method from there to use it as an action. This way, you can add further functionality to your tests without having to dip into code!
We hope you have as much fun using this update as weâve had creating it!
Our Ranorex-NeoLoad webinar was a great success and we were delighted to see how many of you are interested in the Ranorex-NeoLoad integration. In this webinar, we’ve showed you in detail why it makes sense to combine automated functional and load tests, how you can set up the Ranorex-NeoLoad integration, and what you can do with it.Â For those of you who’ve missed the webinar, we’ve recorded it and you can view it anytime here: Ranorex-NeoLoad webinar.
Thank you again for all the questions you’ve asked during this webinar. As there wasn’t enough time to answer all questions during the webinar, we’ve taken this opportunity to answer a few of them, that we believe are interesting to all of you, here:Q1: Can I test my desktop app, which is connected to a server, with NeoLoad and Ranorex?
Yes, thatâs possible. If the communication is based on the HTTP protocol, the NeoLoad recorder captures the traffic utilizing the HTTP transport layer. If the communication is not based on HTTP, you can use custom actions. Ranorex is then able to determine performance values of the desktop app and transmit these values back to NeoLoad.Q2: I have already created Ranorex web tests. Can I transform functional test sequences from these tests into NeoLoad load tests?
Yes. Simply start a NeoLoad recording manually, and then start the Ranorex test. NeoLoad will record all steps that are being carried out by Ranorex, so that the Ranorex test sequence is available in NeoLoad. You can now put a load on your server with NeoLoad and see if your functional test sequence is still successful when under stress.Q3: Where should IÂ install Ranorex and NeoLoad? Can everything run on the same machine or should we use separate systems?
In theory, you can install the NeoLoad controller on the same machine as Ranorex is installed on, but that’sÂ not recommended. Load generation can cause a high CPU usage and the controller needs a lot of memory. Thatâs why it makes sense to install both the NeoLoad controller as well as the load generator on a different machine than Ranorex is installed on. The modules, which are included in the Ranorex-NeoLoad Â NuGet package, enable communication between Ranorex and Neoload regardless of where Ranorex and Neoload are installed. However, if NeoLoad triggers a Ranorex test, a NeoLoad load generator must be installed on the same machine as the Ranorex test runs on.Q4: Are virtual users in NeoLoad carrying out the same actions as the Ranorex automated test?
This completely depends on your setup. The âtest sequencesâ are not linked together in any way. Youâre free to set up the same sequence or use a different one.Q5: When should I start my Ranorex test with NeoLoad, and when does it make sense to start my NeoLoad test with Ranorex?
If you run a functional test session and want to make sureÂ that individual functional test sequences still succeed when the system is under load, it makes sense to trigger and control the NeoLoad tests from Ranorex. The other way round, if youâre running load testing scenarios and want to know if key functional uses cases still work, it makes more sense to trigger the respective Ranorex tests from NeoLoad.Q6: Is there a limit on virtual users, which Ranorex can add to a NeoLoad test?
The number of virtual users is not limited by Ranorex in any way. You can add as many users as your NeoLoad license provides.Q7: Do we need a Ranorex Runtime License for each virtual user in NeoLoad?
No. You can add as many users as provided in your NeoLoad license with a single Ranorex Runtime License. The Ranorex license does not influence the NeoLoad license in any way and vice versa.Q8: Is there a free version of Ranorex and NeoLoad so I can try the integration?
You could also run multiple Ranorex tests in parallel on multiple virtual machines. However, Ranorex is only able to run a single test per machine, as it is a functional test automation tool that automates real mouse and keyboard events. Thatâs why it makes sense to use NeoLoad to create load.Q10: What are the system requirements for Ranorex and NeoLoad to enableÂ this integration?
Yes, thatâs no problem at all. Ranorex creates standalone executable files, which carry out the test. These files have to get triggered by the CI system. You can find instructionsÂ on how to integrate Ranorex tests in your CI system in our blog “Integrate Automated Testing into Any Continuous Integration Process“. NeoLoad also offers command line execution of load tests. You simply have to start the âNeoLoadCmd.exeâ file, as described in detail on this page.Further Resources:
A moment of sudden insight. An idea for a feature so amazing, itâd transform your testing task with Ranorex into a moment of enjoyable, reliable, automated testing bliss and save you a good few hours of work. As youâre not part of the Ranorex crew and simply wonât get to code this feature into our software yourself, your incredible idea will go to waste. At best, itâd make for a great morning coffee conversation with your colleague.
What if we told you that we found a place where ideas count, and counts turn into actual features on our product roadmap? At Ranorex, we refer to this magical place as Ranorex User Voice. Using this platform, you can be part of our journey to creating the best test automation software. After all, we share the same goal: Align Ranorex to your actual automated testing needs.Ranorex User Voice â the right place for your ideas on Ranorex
We believe in providing a space where your ideas count. Let us know how we can make your test automation experience with Ranorex even better. Now, you can directly interact with our product management on the Ranorex User Voice platformÂ by
They certainly do. We greatly appreciate your feedback. The more you contribute on this platform by submitting feature requests and voting for ideas, the more likely it is that your idea will make it on our product roadmap.
Weâre looking forward to reading your feature requests soon!
Android Nougat is Google’s big refresh of its phone and tablet operating system – split-screen mode, quick reply to notifications, revamped settings and toggle menus all make your phone easier and more friendly to use.Â We are happy to announce that with theÂ release Ranorex 6.1.1, we now support Android Nougat.
In addition to this update, some minor bugs have been fixed.Â Check out the release notes for more details about the changes in this release.
Let's be honest: We rarely test the product functionality under load. But how can we be sureÂ our end product works when our customers are using it? As we've described in our previous blog post "Combining Automated Functional and Load Testing", it often makes sense to combine functional and non-functional tests.Â A functional test, which works fine in idle conditions, might fail when the back-end server is under load. Just like simply stressing a back-end system may not reveal functional issues, which canÂ only be found by an automated functional test. If we want to find those errors that only occur under load, we have to combine automated functional tests and automated load tests.
We're happy to announce that you can now combine Ranorex and NeoLoad tests!
In this blog, we want to show you how you can set up the Ranorex-NeoLoad integration andÂ what you can do with it. But first, let's quickly cover the basics:What is NeoLoad?
NeoLoad is an automated load and performance testing tool from Neotys.
NeoLoad offers a full-fledged REST API to either remote control the execution of a NeoLoad test or transmit timingÂ values to NeoLoad. To enable integration with Ranorex, the REST API calls are wrapped with Ranorex functions and packaged into a NuGet package for easy deployment.What do I need to enable the Ranorex-NeoLoadÂ integration?
Now that you're all set, weÂ want to show you in detail how you can:
First, weÂ need to set up the integration:
This will automatically add the necessary libraries to the Ranorex project. The following code modules will now appear in the module browser:
Step 2: Extending the "app.config" file
To ensure the Ranorex project is properly created, you need to extend the 'runtime' section in the 'app.config' file in the Ranorex project with the following information:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:bcl="urn:schemas-microsoft-com:bcl"> <dependentAssembly bcl:name="System.Runtime"> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-184.108.40.206" newVersion="220.127.116.11" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-18.104.22.168" newVersion="22.214.171.124" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-126.96.36.199" newVersion="188.8.131.52" /> </dependentAssembly> </assemblyBinding>
Copy this code and enter it in the 'runtime' section in the 'app.config' file, right after the line <enforceFIPSPolicy enbaled="false" />:
Your 'app.config' file should now look like this:
You can nowÂ use the modules, which are included in the NuGet package, freely within the Ranorex test automation project.Modules included in the Ranorex-NeoLoad NuGet package
The following modules, and their individual variables,Â are included in the Ranorex-NeoLoad NuGet package:
This module establishes a connection to the NeoLoad runtime API. This API is used to remote control a running NeoLoad test. It must be initialized before using the following modules: Start/StopNeoLoadTest and Add/RemoveVirtualUsers.Show the variables available for this module RuntimeApiUri: The Uniform Resource Identifier (URI) of the NeoLoad REST service.
Select Edit > Preference to access these variables in NeoLoad.
This module establishes a connection to the NeoLoad data-exchange API. This API is used to transmit external data to a runningÂ NeoLoad test (it is not active if no test is running). This moduleÂ must be initialized before the modulesÂ Start/StopNeoLoadTest and Add/RemoveVirtualUsers.Show the variables available for this module The following three values provide meta information for a running test and can be used in the "filter" functionality within NeoLoad test results.
Select Edit > Preference to access the last two variables in NeoLoad.
This module startsÂ a NeoLoad test scenario. You need to define the scenario in NeoLoad before.Show the variables available for this module Scenario: The scenario, as defined within the NeoLoad test, that should be started.
Interval: The time intervalÂ (in hh:mm:ss) after which RanorexÂ retries toÂ start a specific test (recommended value: 00:00:10).
Important: Please make sure to addÂ a leading 0 before a single digit number when entering the timeout and interval values.StopNeoLoadTest
This module stopsÂ the currently running NeoLoad test.Show the variables available for this module Timeout: The maximum amount of time (in hh:mm:ss) given to Ranorex to start a specific test (recommended value: 00:01:00).
Important: Please make sure to addÂ a leading 0 before a single digit number when entering the timeout and interval values.AddVirtualUsers
This module addsÂ virtual users to a population, defined in a NeoLoad test scenario. This module can only be used when a test is already running.Show the variables available for this module Population: The population, as defined in the NeoLoad test scenario, virtual users will be added to.
This module removesÂ virtual users from a population, which is defined in a NeoLoad test scenario. This module can only be used when a test is already running.Show the variables available for this module Population: The population, as defined in the NeoLoad test, virtual users will be removed from.
Opening a website is related to a certain latency. This latency depends on various factors, such as the network connection or the browser used. ItÂ can be measured with the "Navigation Timing" API, which is offered by all browsers. If you evaluateÂ these timing values, especially when the website is under load, you canÂ localize potential bottlenecks. Eliminating the identified bottlenecks will ultimately improve the user experience.
The NuGet package offers a mechanism to calculate these timing values and transmit the results to NeoLoad. You can find a more detailed description of the navigation timingÂ here.Â The timing valuesÂ are calculated by the Ranorex/NeoLoad Nuget package:
Highlighted in green, you can see the timing values that are calculated by Ranorex and submitted to NeoLoad.
To transmit the timing values, you needÂ to drag and drop the repository root element, which represents theÂ DOM of the website under test, into the action table in Ranorex Studio. Once the NuGet package is added to the Ranorex project,Â the additional entry "SendNeoLoadTimingValues" will appear in the "Dynamic Actions" list.
Please note: This entry only appears if the root element was created after the NuGet package was added to the Ranorex project. You can find a description of how to enable the NeoLoad "capability" in an existing repository here.
The "SendNeoLoadTimingValues" action accepts a "transaction name" as an argument. WeÂ recommend using the current page as a transaction name in the Ranorex action table. As soon as NeoLoad receives the timingÂ values of this transaction, aÂ tree with the root node containing theÂ Ranorex test suite isÂ automatically created. Another subfolder is automatically created for the respective transaction name. This folder contains the timing values transmitted from Ranorex.
Important: Â Please make sure to initialize the module "ConnectToDataExchangeApi" before you use the moduleÂ "SendNeoLoadTimingValues". Otherwise, an error is thrown.Â
You can drag theÂ data series into the graph board in NeoLoad to visualize it. If you've provided meta-information, such as "Hardware", "Software" or "Location" in the "ConnectToDataExchangeApi", you can now use this information to filter timing values transmitted from Ranorex.Update meta-information in cross-browser tests
If you execute the test in multiple browsers, you have to update the filter options in NeoLoad by calling the "ConnectToDataExchangeApi" module again. To do so, bind the data column, which specifies the browsers, withÂ the "Software" argument from the "ConnectToDataExchangeApi" module. You can now compare timing values from different browsers.
Exemplary Ranorex project structure
In the screenshot below you can see an example of how you can use the modules provided in the NuGet package within a Ranorex test project:
As you can see, a connection to the runtime API is established in the global setup section. The login information take the form of global parameters.
At the very beginning,Â "StartNeoLoadTest" starts the NeoLoad test scenario. The followingÂ test case is data driven and provides the number of virtual users that will be added to the test. These values are providedÂ in "AddVirtualUsers".Â The inner loop is a cross-browser loop. It defines the browsers in which the test will be executed.
Please note: The module "ConnectToDataExchangeApi" can be called multiple times to update the current browser with the filter feature in NeoLoad.Upgrade an existing Ranorex project with the Ranorex/NeoLoad NuGet package
If you add the NuGet package to an existing Ranorex project, which already contains a Ranorex Object Repository with repository elements, the modules provided by the NuGet package are automatically available in the module browser. In this case, the "SendNeoLoadTimingValues" option won't be available in the "Dynamic Actions" list for the already existing repository items. Perform the following steps to enable this option:
1. Open the RanoreXPath editor
2. Switch to "Browser & Results"
3. Drag andÂ drop the root element from the Ranorex Spy to the matching root element in the Ranorex Object Repository.
Now, the "SendNeoLoadTimingValues" will be available in the Dynamic Actions list for the repository root element that describes the website DOM.Conclusion
In this blog, you've learned how you can combine Ranorex and NeoLoad tests. You've seen the modules and variables that are available with this integration and how you can transmit timing values to a NeoLoad performance tests. Now, you will be able to validate critical business cases under load conditions to ensure system stability under real usage conditions and identify potential bottle-necks across technology borders.Further Resources
At conferences, weÂ often get asked how you canÂ increase risk coverage and ensure highest user experience. Fact is that budget constraints and time pressure force testers to achieve maximum results using a minimum of resources. In reality, there’ll always be thoseÂ problemsÂ that occur once the product is released. These are difficult to predict, but can greatlyÂ impede the user experience. In this blog weÂ want to show you why it oftenÂ makes sense to combine functional testing and loadÂ testing.Why performance and functionality of a system are important
First and foremost, an app or website has to work correctly. In an online shop, the user has to be able to open the site, select the desired product, add it to the shopping cart and completeÂ the order. If one of these steps doesn’t work, the user cannot buy the product. This leads to poor user experience (UX) and worst case, resultsÂ in a lost customer. But also the reliability of a system influences the UX. A site has to work! But it has to work over and over again, even under varying conditions. It has to work when the traffic increases, different browsers are used, but also if new functionalities are added. If a website does not offer reliable performance, customers will shy away from using it. Fact is that functionality and performance are important to the success of your website.
Ideal case: you test every possible scenario. But tests take time and no oneâs got time to spare. We need to decide which tests to automate, when and how often. A risk assessment is crucial to pick the right test cases.Assess risk contribution of potential issues
When creating a test strategy with maximum risk coverage, you have to estimate the probability that certain issues occur and assess their impact on the system. Some functional issues only surfaceÂ if the system is put under stress. These are particularly hard to predict. However unlikely these issuesÂ may be, their impactÂ may just not be worth the risk. Just think about the consequences if a âBuyâ button in the shopping cart doesnât appear on Cyber Monday, when thousands of people access the site at the same time.Separated automated functional and load testing
Typically, testing types are clearly separated. This is also true for automated functional and loadÂ testing. Automated functional testingÂ enables you toÂ automatically and reliably verify the systemâs functionality. Load testing verifies the systemâs behavior under peak load. A typical sequence of testsÂ could look like this:
With functional automated testing, you first validate if your website or app worksÂ as expected. Next, the teamÂ tries to manually find bugs while exploring the software. TheseÂ tests are performed while the system is idle. As soon as they succeed, a performanceÂ test verifies the system’s behavior in real usage conditionsÂ – varying traffic, multiple users, increased network load, etc. Finally, the team manually validates the system usingÂ simulated load conditions.Downsides of separating load from functional testing
First of all, this testing scenario includes two sections of manual testing. Naturally, manual testing takesÂ a lot ofÂ time, is brittle and reduces test coverage. Additionally, your automated functional tests will only provide you with feedback on how your system works in idle conditions. You won’t be able to evaluate the load test results for functional correctness. It is not until the very end of the testing process that you will find out how your system worksÂ under stress, in real usage conditions.Benefits of combining automated functional and loadÂ testing
In reality, there will always be those bugs that occur if certain conditions correlate: the link breaks if the site traffic increases or the site content only loads after a refresh. To increase risk coverage and find those functionalÂ issuesÂ that manifest under load, we need to includeÂ load in our automated functional tests. A testing process could now look like this:
You can now incorporate a sustained load in your automated functional tests. This approach to testing enables you to reliably test key functionalities that are most valuable to your business under realistic usage condition. You will be able to identify those issues that only manifest under load early in the testing process, which makes it easier to fix them and will ultimately save you a lot of time. But more importantly, you will finally get tremendously important insights on how end users experience your website. Ultimately, it is up to you to assess the potential impact certain issues may have on your system and if combining these two testing types makes sense in your individual case.
WeÂ would likeÂ to announce that you can now combine Ranorex functional tests with NeoLoad performanceÂ tests!Further Resources
In software engineering, continuous integration means the continuous application of quality control processes â small units of effort, applied frequently.
In this blog weâll show you how to set up a CI job with Hudson/Jenkins that automatically builds and executes your Ranorex automation as well as automatically sends out the generated test reports for every committed change in a Subversion repository.
Continuous integration has many advantages:
You can find a download link and installation description for Hudson and Jenkins here:
In this blog post we are going to use Jenkins as CI tool. There shouldnât be much of a difference when using Hudson.
As Jenkins or the nodes executing the CI jobs normally are started as Windows services, they do not have sufficient rights to start UI-applications.
Please make sure that Jenkins as master andÂ its slave nodes, where the Ranorex automation should be triggered, are not started as a service.
For the Jenkins master, open the âServicesâ tool (which is part of the âAdministrative Toolsâ in the control panel), choose âJenkinsâ service, stop the service, and set the âStartup typeâ to disabled:
Use the following command to start Jenkins manually from the installation folder:
java -jar jenkins.war
After starting Jenkins, use this address to access the web interface:
To configure your Jenkins server, navigate to the Jenkins menu and select âManage Jenkinsâ -> âConfigure Systemâ:
Note: It is necessary to have the Ranorex main components â and a valid Ranorex license â installed on each machine you want to build and execute Ranorex code.Source Code Management
As mentioned before, we are going to use a Subversion repository as base of our continuous integration process.
In this sample, we have two solutions in our repository: the application under test and as the automated Ranorex tests.
To start the application under test from your test project, simply add a new âRun Applicationâ action to your action table in Ranorex Studio, which starts the application under test, using a relative path to the repository root:
As we want to build our code for each committed change within our SVN repository, we need a Subversion as well as a MS Build plugin for Jenkins. An additional mail plugin will make sure that a mail is sent with each build.Install Plugins
Open the âManage Pluginsâ section (âManage Jenkinsâ -> âManage Pluginsâ), choose the following plugins from the list of available plugins and install them if they are not installed already:
The installed plugins also need to be configured. To do so
Now, as the system is configured, we can add a new Jenkins job, which will update the checked out files from a SVN repository, build both the application under test and the Ranorex automation project, execute the application under test as well as the automation code and send a mail with the report file attached.
Start by creating a new item. Choose âBuild free-style software projectâ as job type and enter a job name:
Next, we have to check out the source of both the application under test and our test automation project. Start with choosing Subversion as source code management tool. Then, enter the repository holding your application under test as well as your test automation project. Finally, choose âUse âsvn updateâ as much as possibleâ as check out strategy:
With this configuration, the application under test as well as the test automation project will be checked out and updated locally.Add Build Steps
Now, as the source code management is configured, we can start with processing the updated files.
First of all, letâs add MSBuild steps for both projects:
Choose your configured MSBuild version and enter the path of the solution file relative to the repository root (which is the workspace folder of the Jenkins job) for both the automated and the automating project:
With adding these two build steps, the executables will be automatically built. Now the newly built application should be tested.
This can be accomplished by adding a new âWindows batch commandâ that starts the test suite executable:
As you can see, some command line arguments are passed to the test suite executable.
In this sample, the command line arguments â/zrâ, which triggers the test suite executable to generate a zipped report file, and â/zrf:.ReportsReport-Build-%BUILD_NUMBER%.rxzlogâ, which defines the name and the location of the generated zipped report file, are used.
You can find a list of all available command line arguments in the section âRunning Tests without Ranorex Studioâ in our user guide.
The test suite executable returns â0â on success and â-1â on failure. Based on this return value, Jenkins will mark the build as successful or failure.
After building and executing the application under test and the Ranorex test script, we will send an email which informs us about the success of the triggered build.
This email should include the zipped report file, mentioned before, as attachment.
To do so, add the new post-build action âEditable Email Notificationâ, choose the report file location defined before as attachment, and add triggers for each job status you want to be informed about. In this sample, an email will be sent if a job has failed or succeeded.
Once youâve completed these steps and saved your changes, check if everything works as expected by clicking âBuild nowâ:
After running the generated job, you will see all finished builds within the build hierarchy. Icons indicate the status of the individual builds.
You can view the zipped report files of all builds by opening them in the local workspace (âWorkspace/Reportsâ):
As configured before, an email will be sent to the specified email address(es), including the console output in the email text as well as the generated zipped report file as attachment.Add Repository Hook
Now we can manually trigger a build. As we are working with Subversion, it would be beneficial to trigger the script for each commit.
To do so, you can add a server side repository hook, which automatically triggers Jenkins to start a new build for each change committed, as described in the subversion plugin documentation.
Alternatively, you can activate polling of the source code management system as build trigger in your Jenkins job configuration.
As shown in following picture, you can define the interval, after which the source code management will be invoked (e.g. 5 minutes after every full hour):
Following the steps above you will be able to easily setup a continuous integration process performing the automated test of the application you develop. Each commit will now trigger an automated test run. Once the test run has finished, youâll instantly receive a mail with the Ranorex test report.
Note: This blog was originally published in July 2012 and has been revised to reflect recent technical developments.
Apple’s iOS 10 update for iPhone and iPad lives up to its milestone software version numberÂ and implementsÂ major changes to your daily phone and tablet routine.
BenefitÂ from features such as:
We are delighted to announce that with our latest release,Â Ranorex 6.1,Â iOS 10 is supported.
Upgrade to the latest OS on your mobile devices now to start automating your cutting edge mobile app tests with Ranorex!
We’re happy to announce that we’ve released Ranorex 6.1! This new generation of functional test automation is now fresh and polished to make working in teams even easier! Next to remote test execution, improvedÂ test suite file format and Git integration,Â this software updateÂ introduces an intuitive setting storage and a progressive report preview. Let’s have a look at the benefits, shall we?Solution Settings Ensure everyone in a team uses the same settings when working on a test automation project.
You can now save technology-specific solution settings directly in the test automation solution, while user settings canÂ still be storedÂ locally.Â This brings some rather fantastic benefits with it:
Have fun sharingÂ your settings andÂ working together on test automation projects!
We’ve all been there. You’d like to know how many test cases have failed, but it could take hours until the test runÂ is complete and the full report is available. You’d need this information to react early to failed test casesÂ – or maybe just to have a peace of mind before you go home. Trust us, we get it. So here’s what we’ve done: During test execution, testÂ results are saved in configurableÂ intervals. So whenever you feel like it, you can preview the report from anywhere without disrupting the test run. Enjoy!
For a full list of newÂ features and enhancements, please viewÂ our Release Notes. This software update is available nowÂ and included in software maintenance at no additional costs.
Ranorex is more than just a simple capture and replay tool. It is a versatile test automation software that offers a range of tools suitable for every skill level. While you donât need any programming skills to easily create and maintain your tests with the Ranorex Recorder, you can also manually create your automated tests.
What are the benefits of manual test case creation?
In this example, weâll use the KeePass as application under test (AUT). This open source password manager application is one of our sample applications delivered with Ranorex Studio, so you can easily recreate this example.
In this blog, weâll show you how to
The Ranorex Object Repository manages the UI elements of your automated test. A repository item is automatically created in this central Ranorex Object Repository when you record or track a UI element. If you change a repository item, these changes are automatically applied in the code as well as in the recording module.
Start by opening your solution and add an empty recording module. You will notice that the central Ranorex Object Repository of your test automation project is displayed directly below the action table. You can now add UI elements to the repository using the âTrackâ button in the Ranorex Object Repository.
Enhancing the RanoreXPath
You can alter the RanoreXPath of specific repository items to make them more robust. Simply open the path editor and click on the âEditâ button next to the item. For more information about the RanoreXPath, please have a look at the user guide chapters RanoreXPath and RanoreXPath Editor. If youâd like to know how to best enhance the object recognition of your AUT using the RanoreXPath operators, check out the blog post RanoreXPath â Tips and Tricks.Keep your repository clear and structured
If your Ranorex Object Repository contains many objects, itâs particularly important to keep it clearly structured and organized. Here are two tips:
Rename repository items
Each UI element within the repository can have a logical user-defined name. Renaming repository items and giving them logical names will make it easier to understand test automation code and report files.
Create Logical Folders
You can also create logical folders to structure and group UI elements that logically belong together. For detailed instructions on how to structure your Ranorex Object Repository, please check out our user guide chapter Adapting an Existing Repository.
As your Ranorex Object Repository now contains multiple UI elements, you can add actions to the recording. Do so by either selecting âAdd New Actionâ, or simply drag & drop specific repository items from the repository to the action table in the recording.
If youâd like to connect data to your automated tests and use variables in the action table or the repository, have a look at the user guide chapter Data-Driven Testing.The User Code
You can also create your actions directly in user code. Simply drag and drop the specific repository item from the Ranorex Object Repository directly into the code editor.
In the user guide chapter Code Examples you can find further examples on how to extend modules with user specific code.Conclusion
As you can see, you can create your automated tests manually without pressing the record button at any time. This will give you more control over the actions that should be triggered.
The RanoreXPath is a powerful identifier of UI elements for desktop, web and mobile applications and is derived from the XPath query language. In this blog we will show you a few tips & tricks on how to best use the various RanoreXPath operators to uniquely identify UI elements. You can then use these RanoreXPaths in your recording and code modules to make your automated tests more robust.
Using RanoreXPath operators
The Ranorex Spy displays the UI as hierarchical representation of elements in the Element Browser view. The RanoreXPath can be used to search and identify items in this UI hierarchy.
In this example, weâll use the tool KeePass as application under test (AUT). This open source password manager application is one of our sample applications delivered with Ranorex Studio. If you have multiple applications open, Ranorex Spy will list them all. Filtering the application you want to test will increase speed and give you a better overview. To do so, track the application node of KeePass and set it as root node (context menu > âSet Element as Rootâ). Now, only the main KeePass form and its underlying elements are visible.
General Layout of RanoreXPath
RanoreXPath expressions are similar to XPath expressions. They share both syntax and logical behavior. A RanoreXPath always consists of adapters, attributes and values:
The adapter specifies the type or application of the UI element. The attribute and values specify adapter properties.
The absolute RanoreXPath of our KeePass form looks like this:
The form is an adapter specifying the type or classification of the UI element. It is followed by the attribute value comparison, which identifies the requested element. In this example, the comparison operator is a simple equality.
If you want to know more about how the RanoreXPath works, we recommend our dedicated user guide section.Search for multiple button elements
You can list all buttons elements that are direct children of a designated positon in your AUT. Have a look at these two examples:1. List all buttons that are direct children of the KeePass toolbar:
To do so, simply set the toolbar as root node and type ./button into the RanoreXPath edit field, directly after the given RanoreXPath.
This will create a relative path to all child nodes of the actual node, which are buttons.
2. List all buttons of your AUT:
Navigate back to the form adapter, set it as root node and type in .//button.
Youâve now created a relative path to all descendants of the actual node, which are buttons. These are all buttons of all levels of the subtree of the current element.
Identify controls with a specific attribute
You can also create a path to controls, to filter them according to specific attributes. In this example, we want to find all checked checkboxes.
Open the âFindâ dialog in KeePass (<CTRL><F>), as this dialog contains checkboxes, and set it as root node. Now, you can validate which item of the checkbox control has the attribute âcheckedâ set to true. To do so, enter â//checkbox[@checked=âTrueâ]â:
As you can see, only the checked checkboxes will be visible in the Element Browser.
Identify checkboxes by combining attributes
You can further extend the previous example by combining attributes. This enables you to, for example, omit certain items from the search, or search for specific items.1. Omit a specific item from the search
You can omit a specific item from the search using the ânot equalâ operator and the âandâ conjunction. In this case, we want to omit the item â&Titleâ:
2. Seach for specific items
You can use the âorâ instead of the âandâ conjunction to extend your search and only look for specific items. Extend the checkbox search to look for the items â&Titleâ and â&URLâ:
Recognize related elements using the parent operator
After running the Ranorex desktop sample project, there will be two entries in our AUT â one for a WordPress and one for a Gmail account. In this case, weâd like to find the username of the âGmailâ KeePass entry:
Start with the RanoreXPath to the cell containing the text âGmailâ (framed in red). Next, use the relationship operator âparentâ to reference the parent node of the current element. In this example, itâs a row (framed in blue). The index ââ navigates to the second cell, which contains the Gmail username (framed in green).Recognize related elements by using preceding- and following-sibling
Another way to search for related elements is to use the relationship operator âpreceding-siblingâ. In this example, we want to find the title of a KeePass entry based on its username.
The command âpreceding-sibling::cellâ lists all preceding cells. In this case, the result is the title (framed in green) which corresponds to the given username (framed in red).
In contrast, the command âfollowing-sibling::cellâ delivers all following cells. In our case, these are all following cells (framed in blue) that correspond to the given username (framed in red).
Identify attributes fields using regular expressions
You can also use regular expressions in attribute conditions to identify attribute fields. In this example, weâd like to filter cell adapters that contain an email address in their text attribute. Regular expressions matching an email address may look like this: â.+@.+\..+’â.
The â~â operator instructs Ranorex to filter attribute fields using a regular expression. The â.â in our regular expression matches every single character, while the â+â specifies that the preceding element has to occur one or more times. To escape special characters (such as â.â), enter a backlash before the character.
In our example, every expression will match that contains the character â@â with one or more characters before and after it, followed by a â.â, which is followed by one or more characters.
For more examples on how to use regular expressions in RanoreXPaths, please have a look at this user guide section: RanoreXPath with regular expression.Identify attributes with dynamic values
Dynamic attribute values change each time an element is displayed anew. Fortunately, dynamically generated content usually has a prefix or postfix. To identify dynamic elements, you can either use regular expressions, as described above, or use the âstarts withâ or the âends withâ comparison operators:
The RanoreXPath enables you to find and uniquely identify every single UI element of desktop, web and mobile applications. You can use the RanoreXPath operators to make your test suite more robust and identify even dynamic attribute values.