Update Testcomplete to support more recent browsers
Testcomplete is really far behind on browser support. Edge : 83 - 105 // Current version 112 Chrome 105 // Current version 113 Firefox 91 //Current version 102 More and more tests are starting to break, the community page is full of people with browser problems. It just really needs to get updated to at least 1 or 2 versions ago. I understand that keeping up with the newest version is difficult because of the constant updates. But it's time to support more recent versions again.1.6KViews22likes7CommentsName Mapping Folder request in the Aliases Section
We want to setup our objects in a folder structure within the Namemapping area this would allow for ease of use when creating a new script. At this point there is no way to add New Folders in the Aliases section for us to move the objects into.1.5KViews8likes4CommentsRequest adding CSS Selector to extended properties in Object Browser
Please expand Extended Properties to include CSS Selector (if available). I use CSS Selectors 99% of the time to identify web controls for TC. Sometimes overlaying web controls make it difficult to determine the exact control needed for inserting text, finding text, Child Count, etc. Being able to inspect the properties desired and having the CSS information on the same screen would prevent guesswork with 100% accuracy in copying the Selectorand promote speed in coding... at least for me.1.4KViews6likes2CommentsGitActions integration with TestComplete
I would like to see a native integration between TestComplete projects and GitActions runners. Currently the only option is to create a custom workflow and use self-hosted runners, but this on-prem configuration is a bit archaic as many companies are moving to 100% cloud.1.1KViews8likes2CommentsSetting default attribute to map by with XPath Mapping
TL;DR: I want to be able to set some setting somewhere that tells TestComplete toonlyuse the "data-testid" (or any other) attribute to map objects. What is a data-testid? We have thedata-testidtag on every (important) element on our webpage. This testid is used to uniquely identify an object, meaning no other object on the webpage has this testid. For example like this: <fro-input-wrapper data-testid="CONFIG.COMMON.systemName"> <mat-form-field> <wrapper> <input> </wrapper> </mat-form-field> </fro-input-wrapper> This is obviously a very simplified version, but this is how every object looks like. So every button, every text-input, etc has this attribute. What we currently do We map our objects using XPath, since it is so much faster at runtime to find the objects. So we have only one selector for every object, since we don't need more than that. So our XPath for finding the object shown before would look like that: //fro-input-wrapper[contains(@data-testid, 'CONFIG.COMMON.systemName')]//input The issue is, that when we use the TestComplete Object Spy and hover over the Object shown before, TestComplete searches out what it thinks is best suited for mapping the object. Which is totally random and does not conform to the way we want it (like shown above) The TestComplete Mapping looks something like that.... ... Which is just some random way to identify the object. So currently what I created is a Template for every object type (inputfield, slide-toggle, button, ...) that we just copy paste and paste in the correct data-testid. This is the most elegant solution that we found and it works sort of well. But I cant think that we are the only ones using some form of testid on our object. We are thinking about switching to Cypress, since it supports data-testid with a testing-libary, but the issue is that not everyone in our team is a coder and doesn't know how to code in JS. What we want A setting to define any attribute (in our case the data-testid) that TestComplete automatically uses to map the objects. I imagine it working something like that: Using the Object Spy to hover over an object that I want to map TestComplete searches for the data-testid attribute If it doesn't find one in exactly the Object that has been selected, it searches upwards in the DOM tree until it finds an object containing that data-testid attribute. It uses to object to map the original Object that was hovered over. I don't think that this would be too hard to implement and it would greatly improve our workflow., For any questions regarding the issue, please feel free to ask.1.1KViews3likes4CommentsAllow OOP coding with full intellisense in Testcomplete
I understand that Testcomplete is a scripting language and some use the tool for automation script development with "record & playback", however, it would be much appreciated have the option of developing using a oop design patterns. Python and JavaScript are powerful languages. By relegating them to a script code style is stripping away their best features. Those that use JavaScript and Python for automation are using them with selenium which does not have a great way to automate desktop applications. By allowing users to choose to develop oop code with the namemapping features, Testcomplete can work as the preferred IDE for automation.1.1KViews7likes2CommentsLog Folder Items, Set the Icon while inside the stack (or auto detect on some hiearchy)
I thought this should just be a feature already and I posted asking for help to get it to work. https://community.smartbear.com/t5/TestComplete-General-Discussions/Log-Folder-Icon-Checkpoint-Over-Message-Javascript/m-p/200736#M37434 The log folders are real nice for cleaning up the logs but they only change Icon's if the Folder contains an Error or a Warning. I want LogFolders to show a green if it contains a checkpoint. A common sense order of importance Error > Warning > Checkpoint > Message. Instead it's showing Error > Warning > Message. I think it should even auto detect based on the Log item's priority that has been set. Or just a method to hit ie, Log.CurrentStack(iconWarning, priorityHigh); function TestScriptLog() { Log.AppendFolder("This folder Icon should be an Error"); Log.Message("Informational in Folder","",pmNormal); Log.Checkpoint("Checkpoint in Folder","",pmNormal); Log.Warning("Warning in Folder","",pmNormal); Log.Error("Error in Folder","",pmHighest); Log.PopLogFolder(); Log.AppendFolder("This folder Icon should be an Error"); Log.Message("Informational in Folder"); Log.Checkpoint("Checkpoint in Folder"); Log.Warning("Warning in Folder"); Log.Error("Error in Folder"); Log.PopLogFolder(); Log.AppendFolder("This folder Icon should be a Warning"); Log.Message("Informational in Folder","",pmNormal); Log.Checkpoint("Checkpoint in Folder","",pmNormal); Log.Warning("Warning in Folder","",pmHighest); Log.PopLogFolder(); Log.AppendFolder("This folder Icon should be a Warning"); Log.Message("Informational in Folder"); Log.Checkpoint("Checkpoint in Folder"); Log.Warning("Warning in Folder"); Log.PopLogFolder(); Log.AppendFolder("This folder Icon should be a Checkpoint"); Log.Message("Informational in Folder","",pmNormal); Log.Checkpoint("Checkpoint in Folder","",pmHighest); Log.PopLogFolder(); Log.AppendFolder("This folder Icon should be a Checkpoint"); Log.Message("Informational in Folder"); Log.Checkpoint("Checkpoint in Folder"); Log.PopLogFolder(); Log.AppendFolder("This folder Icon should be an Informational"); Log.Message("Informational in Folder","",pmHighest); Log.PopLogFolder(); Log.AppendFolder("This folder Icon should be an Informational"); Log.Message("Informational in Folder"); Log.PopLogFolder(); }