Application url change management

Originally posted by HirendraSingh on April 13, 2026

Hello, I just wanted to know how you guys are managing the application URL for web projects, as in our organization we need to check application on different urls and currently I am manging it with project variable with common url and then using (*) like http://www.google.com/page/\* but the problem I am facing sometimes is some similar object getting mapped under single page eventhough the pages are different and tests sometimes fails.

Originally posted by rraghvani on April 14, 2026

Using Wildcards - The asterisk wildcard corresponds to a string of any length (including an empty string). The question mark corresponds to any single character.

If this website https://www.w3schools.com/ were to have different domains names for UAT, Regression, Production Support in the form of https://www.uat-w3schools.com/, https://www.reg-w3schools.com/, https://www.ps-w3schools.com/. Then use wildcard like so https://www.*-w3schools.com/. All pages (child objects) belong to the domain name (parent)

You need to identify the relationship between child and parent objects, and structure your name mapping accordingly

Originally posted by rraghvani on April 15, 2026

Are you able to provide the exact URL you are having issues with? The example you have provided “http://www.google.com/page/\*” is very vague.

Also, have a look at Name Mapping - Conditional Mapping Criteria

Originally posted by HirendraSingh on April 15, 2026

Below is the different url of different pages and I am using https://int-apps.tuvsud.com/GCN/Pages/* in Project variable so that all the objects will map under single page.
https://int-apps.tuvsud.com/GCN/Pages/Default

https://int-apps.tuvsud.com/GCN/Pages/List

https://int-apps.tuvsud.com/GCN/Pages/Probation

Originally posted by rraghvani on April 15, 2026

This example is based on the website https://www.w3schools.com. I’ve built the name mapping hierarchy structure shown below.

URL CSS Tutorial

URL HTML Tutorial

Though both pages contain a Title and two buttons “< Home” and “Next >”. They belong to different pages of the hierarchy - you have to create individual components so that they have unique relationships between parent and child.

You can modify the hierarchy structure of Aliases, so that you can access the components like so

Aliases.pageCssTutorial.linkHome
Aliases.pageCssTutorial.linkNext
Aliases.pageJavascriptTutorial.textnodeTitle

If the domain name changes https://www.uat-w3schools.com or https://www.reg-w3schools.com then I can use wildcard to replace uat or reg with “*” so it becomes https://www.*-w3schools.com.

It’s vital the get the name mapping structure correct, for TestComplete to identify the correct objects. Each child object, must have a parent object.

Originally posted by HirendraSingh on April 15, 2026

So, you mean to say first I will map all the pages and then I will replace its url with wildcards in name mapping, so in my case it can be as below. Also does this wildcard work in constant mode also like shown in SS.

https://*-apps.tuvsud.com/GCN/Pages/Default

https://*-apps.tuvsud.com/GCN/Pages/List

https://*-apps.tuvsud.com/GCN/Pages/Probation

Originally posted by Hassan_Ballan on April 15, 2026

You can google “what are the URL parts” to do some reading. A URL can contain a protocol, subdomain, root domain, path, query, and fragment.

TestComplete NameMapping is organized by Pages that reference unique URL’s. You can use wildcards in Pages URL’s; however, when URL’s are not unique enough, TestComplete can get confused.

Starting a browser session and navigating to the URL specified in a variable is perfect for environment switching for example DEV, QA, and UAT. For example:
*-apps.tuvsud.com/GCN/Pages/Default
*-apps.tuvsud.com/GCN/Pages/List
*-apps.tuvsud.com/GCN/Pages/Probation

Making a single TestComplete page to store all your mapping is problematic as you are facing, some pages have similar objects and can fail. For example:
*-apps.tuvsud.com/GCN/Pages/*

You need to maintain a balance of unique Pages but also include flexibility to reduce number of Pages mappings. For example:
*-apps.tuvsud.com/GCN/Pages/Default/*
*-apps.tuvsud.com/GCN/Pages/List/*
*-apps.tuvsud.com/GCN/Pages/Probation/*

If this resolves your scenario, marking it as the solution helps future readers find it quickly.

Originally posted by rraghvani on April 16, 2026

I revisited an old TestComplete project where I had reworked my name mappings a few years ago and introduced this hierarchical structure.

Using an INI file, using Storages.INI to set the variable

For the web application, I used conditional mapping criteria to handle both authenticated and non-authenticated scenarios, along with wildcards to support different environments such as “uat” and “reg”.

Conditional and wildcard name mapping used for the URL

Each panel in the hierarchy represents a specific webpage within the application.

The wildcard used at the beginning is for the URL domain, and the wildcard used at the end is for the SchemeID. For example,

http://als.uat.nonauth.internal.smartbear.com/Administration/AddAssetRecalibration/5

Whereas the wildcard at the beginning here, is used for the SchemeID. For example,

http://als.uat.nonauth.internal.smartbear.com/5/Implementation/AddScheme

Within the project suite, the “Benchmarking” project corresponds to a separate page that I was testing. I defined a panel called panelBenchmarking, which contains only the name mappings for the objects I interact with on that page.

I organise Aliases, so that I don’t have to use long names when referencing an object.

I found this structure to be very effective. The only changes required for different environments - such as database configuration, usernames, and passwords - were handled through updates to the INI file. This avoided the need to frequently check files in and out of TestComplete.

I applied this approach across multiple projects. However, over time, maintaining name mappings became increasingly difficult, especially when updates were required across all projects due to feature changes. Since name mappings are project specific and cannot be shared, this created significant overhead.

Eventually, I decided to remove name mappings altogether and switched to using the Find method instead.

This should give you a clear idea of how to structure your name mappings effectively and resolve your issue.

Originally posted by HirendraSingh on April 17, 2026

This is good for undersatnding, thanks for sharing, can you give some screenshots of current approach you are using to maintain Name mapping if possible. That will be really helpful.

Originally posted by rraghvani on April 17, 2026

I no longer use Name Mapping because it became difficult for the team to maintain. In particular, updating the shared name mapping repository and merging the changes into individual projects was error-prone. We also encountered issues where mappings became corrupted, duplicated, or lost, due to issues within TestComplete

Name Mappings fully removed from all projects. Created helper methods to use Find method, to locate UI objects and to interact with

Originally posted by HirendraSingh on April 20, 2026

rraghvani​ thanks for sharing these details. As I can see you are managing through helper class and you had created separate scripts for that.
But the case is that my Team is not that much technical that is why we have chosen TestComplete tool so that we do not need to manage our object repository separately.
Also, once the object is mapped in name mapping, I am changing its name and selector manually as shown below, so what is your thought on this as we are having many projects and mostly 1,2 QA are working in each project for automation.

Originally posted by rraghvani on April 20, 2026

I personally wouldn’t change the name mapping criteria, as TestComplete has already identified the controls correctly using their property values. Only change the names if you plan to interact with those controls.

In this case, I’ve organised everything using Aliases, and I’ll be accessing the object via Aliases.pageSmartBear.buttonClients rather than NameMapping.Sys.browser.pageSmartBear.panelSchemeSetUp.panelImplementationActions.panelSchemeSetUp.panelSchemeSetUp.panelClients.panelClients.buttonClients.

Changing names, as these are only the controls that I’m going to interact with