代码之家  ›  专栏  ›  技术社区  ›  Tree55Topz

使用TreeViewItem的本机类扩展UIObject

  •  1
  • Tree55Topz  · 技术社区  · 7 年前

    原始问题

    我有一个可展开的文件夹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 回复  |  直到 7 年前
        1
  •  2
  •   Adelin    7 年前

    理论

    为了 Expand Collapse 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();
      

    唯一可展开的对象是 ITreeViewNode (也就是说,这是一个 .Expand 方法),而到达节点的唯一方法是通过 ITreeView ,如上所示。

    实际上。。。

    你想 UIObject (我怀疑这就是物体识别中心所识别的,对吗?) 作为 ITreeView ,以便您可以拨打 扩大 崩溃 在上面?

    这是不可能的。

    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 类双击该确切位置:

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

      它现在不起作用的原因是 .DoubleClick 默认情况下,在 UIObject对象 ,我有一个预感,那不是可扩展对象所在的位置-因此需要提供微调参数。