ContributionsMost RecentMost LikesSolutionsRe: How to find background color of a cell in a table? I would think maybe your RGB value may be looked as an array given it is 3 values separated by commas. Just a hunch, but if you are assigning that to a string then it would mismatch. Try to do an explicit conversion to a string.. https://support.smartbear.com/testcomplete/docs/reference/program-objects/aqconvert/vartostr.html Improved Click Speed on Radio Buttons Using Xpath I finally decided to tackle a slowness issue which has been slowing my tests forever. It is a simple page with a table of data and corresponding radio buttons which need selected based upon the row I need to use. Here is a screenshot... In TC I mapped the "Selection_Table" as an object, so I could reference it, and then iterate through the rows to find the correct "Station" value and select the corresponding radio button using a for loop, like this: function ClickOnCSAInCorrectStation(Station) { Aliases.browser.SelectionScreen.Selection_Table.Refresh(); let TotalRows = Aliases.browser.SelectionScreen.Selection_Table.ChildCount; for (let i = 0; i < TotalRows; i++) { // Log.Message(aqDateTime.Now()); //Time how long iterating rows takes. if (Aliases.browser.SelectionScreen.Selection_Table.Panel(i).Panel(0).Panel(3).contentText == Station) { // Log.Message(aqDateTime.Now()); //Time how long the click() action takes. Aliases.browser.SelectionScreen.Selection_Table.Panel(i).Panel(0).Panel(0).RadioButton(0).Click(); // Log.Message(aqDateTime.Now()); return true; } } } By uncommenting the timestamps, I found that it took milliseconds for the script to go through each row of the table and find the correct row. However, where I had the problem was when the radio button was actually being clicked, which took an average of 21 seconds! The page and table were fully loaded, no background scripts or anything were running, so I was completely puzzled as to how the actual click could take so long. So, I decided to instead to try to find the radio button in the row using FindElement instead to perform the click action: Aliases.browser.SelectionScreen.Selection_Table.Panel(i).FindElement("input").Click(); This resulted in the click now taking 10 seconds average, so it cut the time by a little more than half. But, still too long to click a radio button. So, finally I decoded to try and go all in finding the radio button using only Xpath as shown here: Aliases.browser.SelectionScreen.Selection_Table.FindElement("//div[text()='" + Station + "']/parent::*/div/span/span/input").Click(); Much improved, down to 1.5 seconds to click. AND, I was able to eliminate the for loop completely saving a bit more time. I am posting this because when I was researching I found a handful of posts which referenced the click() method being slow, and a solution wasn't posted that was of help to me. But, if anyone has other suggestions on how to improve the speed of the click even more, then I would be glad to hear them. Doing the above will likely save me an hour of execution time for all my tests combined. Re: interaction with multiple drop-down lists I often need to capture dynamic values and I store them in an array, then access each array value for other reasons. Here I pass in the drop down object to the function to capture the options within an array... function CaptureSelectBoxOptions(SelectBoxOptionsList) { const values = []; let TotalOptions = SelectBoxOptionsList.ChildCount; //Log.Message(TotalOptions, "", 0); for (let i = 0; i < TotalOptions; i++) { if (SelectBoxOptionsList.Child(i).contentText != "") { values.unshift(SelectBoxOptionsList.Child(i).contentText); } } return values; //Returns an array of the values from the select box. } You could then iterate through that array to click on each value so the second drop down populates, and capture the values in the same manner. Or you could probably just add something like this to the if statement above to capture and click them at the same time: SelectBoxOptionsList.Child(i).Click(); You may also need to refresh the TestComplete object tree cache to capture the newly populated values (from the second drop down) after clicking an option in the first drop down using something like this: Aliases.browser.PageName.DropDown2Name.Refresh(); Re: Change default co-ordinates in Testcomplete For my x and y coordinates, I used the following snippet of custom code to get it to click in the middle of the object exactly, as I knew I needed to click that exact point for a dialog box to appear... Aliases.browser.pagename.canvas.width/2 Aliases.browser.pagename.canvas.height/2 The thing I like about doing it this way is that if your object dimensions, browser window size, or other factors change, it calculates the middle point of the object regardless. Re: Object identification is very slow The object identification tool doesn't usually take too long for me, but manually mapping objects is VERY time consuming. When I use the Object Browser, and expand successive levels of objects it become slower and slower with every level I drill down within. Sometimes expanding the various levels takes a minute or two. This has occurred regardless of version (14.x or 15.x) and I also tend to agree that as the project suite has grown it lags more. We are using React and NPM, which add in a lot of layers of objects within the page, it isn't basic HTML drop downs but instead layers and layers of DIVs. Re: Problems with TestComplete 15 and Chrome 113 Not trying to hijack this thread, but my memory issues started about the same time also. I reported it on Feb 14 after a few instances of it occurring. It started as aRuntime error 216, but also manifests as a chrome "out of memory" error. Fingers crossed that support of the newest Chrome version will resolve this too. Re: Problems with TestComplete 15 and Chrome 113 Agree with rraghvani, locked settings by IT. I hope this also helps resolve some intermittent "Out of Memory" errors which seemed to start recently running TC along with Chrome. I contacted support and was told I needed to downgrade to the latest supported Chrome version 102. I suspect the memory issues also cropped up due to incompatibility issues with recent versions of Chrome. Not sure if anyone else has seen this memory issue too??? (I had not seen it until the last couple of months, so we replaced my 16GB RAM and motherboard to make sure it wasn't my laptop.) Re: How to get the value from status bar message Depending on the language you are using, you could also use a slice() function to cut what you need out of the sting if the number is always in the same position. requisition = contentText.slice(28, 38) Re: Designing a for/while loop to expand varying objects within objects I would guess you probably need to find an identifier for the child row + boxes, separate from those of the parent row. Use the Object Spy to see if there is a unique identifier you can use to expand those children rows. You can also ask your dev team to add a specific identifier to the code so that you know exactly what to look for, such as "childexpander" Based on your screenshot, I see about 12-14 rows total depending on how the structure of table is laid out. So, I think your figure probably includes the expandable rows you are trying to open. I was going to suggest that you may need to refresh TC's cache when you open the menu, but if it is already aware of those rows then that is likely not needed. I have found when I go to a page and perform an action which makes an API call to the server, that after the UI content is refreshed that I need to refresh TCs cache by doing something like this... Aliases.browser.PAGENAME.TABLENAME.Refresh(); I would suggest using the "Object Browser" to figure out the structure of the page you are using and how rows are structured within. It takes some time to expand the objects and find the specific rows you need, but it often helps me know what children are being identified at each level. Re: Designing a for/while loop to expand varying objects within objects I wrote custom code to detect the rows in a table and then click on a button within another cell of the table. Here is a basic script I use to identify then iterate through the rows to find the desired value, then click on the corresponding button... let TotalRows = Aliases.browser.PAGENAME.TABLENAME.ChildCount; // Log.Message(TotalRows, "", 0); for (let i = 1; i < TotalRows; i++) { //Starts on the first data row, rather than the header row. if (Aliases.browser.PAGENAME.TABLENAME.Cell(i, 0).contentText == DESIREDVALUE) { Aliases.browser.PAGENAME.TABLENAME.Cell(i, 3).FindElement("[type='button']:nth-child(1)").Click(); return true; } } I have also found running loops within loops tends to slow down TestComplete greatly, but haven't foun a great workaround to speed it up.