使用 TreeViewItem 的 Native Class 扩展 UIObject

Expanding a UIObject with Native Class of TreeViewItem

原题

我有一个可展开的文件夹 UIObject,我需要将其展开以显示所有子文件夹。不能双击它,因为这不会展开文件夹。我从这个文档 https://admhelp.microfocus.com/leanft/en/14.02/NetSDKReference/HP.LFT.SDK~HP.LFT.SDK.Java.ITreeView.html 以及其他一些文档中看到,有 ITreeView 和 ITreeViewNode 的概念。

如何展开这个元素?我真的只需要一些代码示例,说明我们如何获取一个对象,将其定义为 ITreeView 和 ITreeView 节点并展开它。

结果

即使这不是最佳解决方案,也可以使用下面建议的解决方法来实现,这就是实现它的方法

public void ExpandFolder(int index)
{
        IUiObject folder = ViewPage.FolderExplorer.Describe<IUiObject>(new UiObjectDescription
        {
            ObjectName = "TreeViewItem",
            Index = (uint)index
        });

        var expandButton = folder.AbsoluteLocation;
        expandButton.X = expandButton.X + 2;
        expandButton.Y = expandButton.Y + 4;

        Mouse.Click(expandButton);

        GeneralUtilities.Sleep(1);
}

在这种情况下,元素左侧有一个小的下拉箭头。我无法识别,所以我识别了文件夹并操纵了点击。如果有人偶然发现这一点并且知道使用 LeanFT 执行此操作的更直接方法,我非常希望看到一个示例。如果没有,您正在这里寻求帮助 - 我希望这对您有所帮助!

理论

为了ExpandCollapse一个JavaITreeView,这些是步骤:

  1. 描述 ITreeView:

    ITreeView treeView = Desktop.Describe<IWindow>(new WindowDescription())
        .Describe<ITreeView>(new TreeViewDescription()
        {
            AttachedText = "Etc"
        });
    
  2. 获取其中一个节点:

    ITreeViewNode treeViewNode = treeView.GetNode("someNode");
    
  3. 展开或折叠它:

    treeViewNode.Expand(); treeViewNode.Collapse();
    

唯一可扩展的对象是 ITreeViewNode(即,这是具有 .Expand 方法的对象),到达节点的唯一方法是通过 ITreeView,如上图

实践中...

你想把一个UIObject(我怀疑这是物体识别中心识别的,对吧?)作为一个ITreeView,这样就可以在上面调用ExpandCollapse了?

这是不可能的。

  1. 在这些 SDK 中,每个描述都是一个通用元素。在 Java 中是 UIObject,在 Web 中是 WebElement,等等。
  2. 那些更独特的,比如树状视图,扩展通用的(UIObject)并在过程中增加一个识别属性
  3. ITreeView的情况下,很可能是UIObject NativeClass设置为"javax.swing.JTree"

如果对象识别中心没有将可扩展对象识别为 ITreeView,那是因为它不是。

解决方法

如果您的目标只是展开,并且手动双击有效,那么您可以:

  1. 识别 UIObject;
  2. 计算您手动双击的点相对于UIObject左上像素的坐标。 (例如,向下 5 个像素,向右 5 个像素)

    您可以对其进行近似、试错或使用可以提供帮助的工具。

  3. 使用 HP.LFT.SDK.Mouse class 双击该确切位置:

    var loc = theUiButton.AbsoluteLocation;
    var p = new System.Drawing.Point(loc.X + 5, loc.Y + 5);
    
    Mouse.DoubleClick(p, MouseButton.Left);
    

    它现在不起作用的原因是因为 .DoubleClick 默认情况下在 UIObject 的中心执行双击,我有预感这不是可扩展的地方object 是 - 所以你需要提供微调参数。