uipath 怎么获取uielement对象的子元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uipath 怎么获取uielement对象的子元素?相关的知识,希望对你有一定的参考价值。

如图,当我获取到list item元素时,怎么获取它下面两个子元素的文本内容,还有官方有没有提供uielement对象方法的详细介绍,望告知,谢谢

参考技术A

    申请一个变量 item 类型为  uipath.core.activies.Uielement

    使用查找元素   然后 元素为 <ctrl name='消息' role='list' /> 输出为 item 

    使用写入行打印 item.Get("text").ToString

参考技术B 你要把问题说清楚,是什么情况下的UI,看图是微信聊天界面的ui?然后要确定你用的是网页,还是开发模式下的连接。还是电脑App登录

在 UIAutomation 中使用accessibilityIdentifier 获取UIElement

【中文标题】在 UIAutomation 中使用accessibilityIdentifier 获取UIElement【英文标题】:Fetch UIElement by using accessibilityIdentifier in UIAutomation 【发布时间】:2014-08-08 13:58:34 【问题描述】:

我正在使用分析器和 UIAutomation 为我的 iOS 应用编写测试。

如何获取我在代码中分配了accessibilityIdentifier 的UIElement?这是我的问题。我有一个在 iPad 和 iPhone 上运行的通用应用程序。这些设备上的视图不同。我有 2 个略有不同的 Xib 文件。在 iPhone 上,我有包含 UILabel 的 ScrollBar。在 iPad 上,我有包含 UIView 的 ScrollBar,其中包含 UILabel。这些标签与同一个 IBOutlet 联系。我已将accessibilityIdentifier 分配给IBOutlet。

如何使用accessibilityIdentifier 从JavaScript 中获取我的标签?可以在 iPad 和 iPhone 上使用相同的代码完成吗?

类似

var label = target.frontMostApp().mainWindow().elements()["myAccesibilityIdentifier"];
UIALogger.logMessage("Is label valid? " + label.isValid());

结果我得到 标签有效吗?假的

【问题讨论】:

【参考方案1】:

看看 Mechanic (https://github.com/jaykz52/mechanic)。您可以按名称访问元素,它会为您搜索视图层次结构。例如

var label = $('#myAccesibilityIdentifier');

【讨论】:

感谢您的回答。我想知道这是否可以在不使用 3rd 方的东西的情况下解决?我想这个问题很常见。 UI 将与 iPad 和 iPhone 不同,所以我认为 Apple 必须为此提供解决方案。 据我所知,Apple 几乎不强调 UIAutomation。我怀疑他们在内部使用它。它甚至在 iOS 8 中有所改进吗?我没有看到来自 WWDC 的任何消息。 @GrahamPerks,在我个人看来。在 iOS 8 中,UIAutomation 在 iOS 方面实际上变得更糟了。在 WWDC 期间,他们提到了他们对自己的自动化功能感到多么自豪,因为他们在 OSX (Yosemite) 中对自动化任务进行了重大升级。然而,当谈到在 iOS 上运行自动化时,有一些更改没有记录到 Xcode 发行说明中。更改的主要内容是放置了一个模板文件,该文件用于从终端运行 UIAutomation(少数第三方工具依赖于该文件的绝对路径)。以及其他问题。【参考方案2】:

在您的自动化代码中,您可以辨别您正在运行的 iPad 还是 iPhone(示例)

if(target.model()=="iPhone" || target.model() == "iPhone Simulator")

    var phone = true;
    var pad   = false;
    var appName = app.name();
    UIALogger.logMessage("Testing device is: iPhone");
    UIALogger.logMessage("Logger says: " + target.model()); 
    UIALogger.logMessage("Application name: " + appName);
   
else if(target.model() =="iPad" || target.model() == "iPad Simulator")
   
    var phone = false;
    var pad   = true;
    var appName = app.name();
    UIALogger.logMessage("Testing device is: iPad");
    UIALogger.logMessage("Logger says: " + target.model());
    UIALogger.logMessage("Application name: " + appName);

根据我在示例中设置的变量 phone/pad,您可以指示您的脚本如何找到您要查找的元素。

if(phone)

    //var label = Path to element (phone)

else if(pad)

    //var label = Path to element (pad)

我知道同时使用 pad/phone 是多余的,但我最初这样做是为了安全,以防将来第三种类型混入 iOS 开发中(以防万一;))。

【讨论】:

以上是关于uipath 怎么获取uielement对象的子元素?的主要内容,如果未能解决你的问题,请参考以下文章

uipath中通常有两种

反射应用二(获取xml中键的属性及其值)

UiPath--文件操作详解

uipath获取Windows凭证

如何在Objective-C中将孩子分配给父母?

在 UIAutomation 中使用accessibilityIdentifier 获取UIElement