使用TreeViewItem的本机类扩展UIObject

时间:2018-01-30 21:13:38

标签: c# hp-uft leanft

原始问题

我有这个可扩展的文件夹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更直接的方法,我非常希望看到一个例子。如果没有,你在这里寻求帮助 - 我希望这对你有所帮助!

1 个答案:

答案 0 :(得分:2)

理论

为了ExpandCollapse Java ITreeView,以下是这些步骤:

  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();
    
  4. 唯一可扩展的对象是ITreeViewNode(也就是说,这是具有.Expand方法的对象),获取节点的唯一方法是通过ITreeView ,如上所示。

    在实践中......

    您想要UIObject (我怀疑这是识别出的对象识别中心,对吗?) 作为ITreeView ,所以您可以在其上拨打ExpandCollapse吗?

    这是不可能的。

    1. 在这些SDK中,每个描述都是通用元素。在Java中,它是UIObject,在Web中它是WebElement等。
    2. 那些更独特的,如树视图,扩展通用的(UIObject)并在流程中再添加一个识别属性
    3. ITreeView案例中,很可能是UIObject NativeClass设置为"javax.swing.JTree"
    4. 如果对象识别中心没有将可扩展对象标识为ITreeView,那是因为它不是。

      解决方法

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

      1. 确定UIObject;
      2. 相对于UIObject的左上角像素,计算手动双击的点的坐标。 (E.G. 5像素向下,5向右)

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

      3. 使用HP.LFT.SDK.Mouse课程双击确切位置:

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

        它现在无法正常工作的原因是因为.DoubleClick默认情况下会在UIObject的中心执行双击,而我有预感而不是可扩展对象的位置 - 因此您需要提供微调参数。

相关问题