Right Click on RCP List View
We have a desktop application built on top of RCP which uses SWT to draw its UI elements. We have noticed that the ClickItemR function of TestComplete which simulates a right-click does not work properly on the SWT Table UI element. It's inconsistent, it works sometimes and fails most of the time.
If there is any suggestion on how to properly simulate a right-click functionality on SWT Table element.
Hi @naveenchandravp -
What types of messages are you getting in regard to the failures? It could be a timing issue if it is inconsistent - sometimes a delay or increasing the time in between steps can help to mitigate issues. But ill have a better idea to help if you can let me know what the failures are.
@ebarbera Thank You for the quick response and apologies for not providing complete details.
Below is the error that I am getting
"Popup menu was not found for the "Aliases.DataExplorer.Shell2.Composite2.Composite.Composite.Composite.CTabFolder.ContributedPartRenderer_1.CTabFolder.StatisticsComposite.ListView" object. 0:50:36 Normal 11.22"
The Popup menu was not found because ClickItemR was not successful.
I also tried using the ClickR function and provided proper x, y coordinates. Here too the app is inconsistent. It sometimes opens the context menu and sometimes doesnt.
I added a delay of 2000 ms in between each step. No luck
The version of TestComplete I am using: 14.93.312.7 (running on 64 bit)
Now when I was checking what's new on TestComplete 15.10 page, I see a comment about improved "click-related" actions. I will upgrade my installation and try. Meanwhile, if you have any suggestions I would be grateful.
Little disappointed as TestComplete 15.10 also fails to fix this problem. Same behavior.
Can you please let me know if there is something that I need to do? Or you need more details around this topic.
For anyone who is struggling with the same problem, I wrote a python script (which is just a workaround and not the desired way of opening the context menu on lists) which seems to be working for me.
arr = Sys.Process("<ProcessName>").FindAllChildren("WndClass", "SysListView32", 50)
if len(arr) > 0:
for i in range (0, len(arr)):
if True == arr[i].Focused:
Log.Message("Context Menu Opened Successfully!")
Log.Error("No List Objects were found.")
@ebarbera I would still like to hear from you if there is any better approach for this issue.
Hi @naveenchandravp -
Apologies on the delayed response - we do have a document that outlines specific suggestions when working with listview items, maybe this will be of more help (https://support.smartbear.com/testcomplete/docs/app-objects/specific-tasks/standard/list-view/addres...). It is a bit tricky to diagnose the right click issue without having seen it I apologize but if I find out any additional information I will let you know. I will also pass along this information to product.
Let me know if you have further questions.
@ebarbera Thanks for the response!
The page talks about the ClickItem function, which is working perfectly fine for me. My concern is w.r.t ClickItemR and ClickR functions which simulate right-click.
I understand it's difficult to suggest anything without actually being able to reproduce the problem. Will it help if I create a sample application and provide reproducable steps?
Hi @naveenchandravp -
Yes - this would be very helpful.
The reason I suggested that document is because sometimes if one approach is not working with automation it is best to use a workaround. But if you are trying to validate the functionality of the right click specifically I understand your concern.
The issue could be that there is more than one SysListView32 control. It could be on the same Form or maybe in memory and not visible. This could explain why you are seeing inconsistent results and why looping an array of list view controls seems to work.
A couple of things you could try.
1. Narrow you search by specifying parameters that are unique to the control. For example, make sure it is visible. Or if it has a unique index you could specify that.
Listview = Sys.Process("<ProcessName>").FindChild(new Array("WndClass","Visible", "Index") , new Array("SysListView32", true, 1), 50)
2. Get a parent object closer to the desired SystemListView32 object.
Parent = Sys.Process("<ProcessName>").FindChild(new Array("WndClass","Visible") , new Array("#32770", true), 50)
ListView = Parent.FindChild(new Array("WndClass","Visible", "Index") , new Array("SysListView32", true, 1), 50)
I hope this helps.