帮助中心
如何跨工程传递界面元素?

在设计器中,本工程元素库中的元素无法在其他工程中使用。但在实际应用场景中,存在需要将本工程元素传递至其他工程使用的场景。例如,很多平台都需要登录,而登录的流程业务逻辑都大体都是一致的,只是不同平台界面元素有差异,那么可以编排一个登录流程的组件,组件内不含界面元素,通过项目流程调用登录组件,并通过传参的方式向组件传递项目流程中拾取的关于登录的界面元素,这个场景中向自定义组件中传递参数就是跨工程传递界面元素的一种。在日期选择、翻页等场景也需要类似操作。

# 界面元素Locator资源值

界面元素的Locator信息是一段记录界面元素完整特征的文本,可以通过元素的Locator信息实现跨工程传递界面元素。界面元素的Locator信息结构如下:

  {"app":[{"dChecked":true,"dCheckedInfo":["App","Tag","Url"],"dScreenShot":"f3065007-db36-4c74-a361-3da296a131e1a.png","dWindowType":"1000001","App":["1","chrome.exe","String"],"Tag":["1","HTML","String"],"Title":["1","百度一下,你就知道","String"],"Url":["3","https://www.baidu.com/","String"]}],"locators":[{"dScreenShot":"f3065007-db36-4c74-a361-3da296a131e1.png","type":1,"locator":[{"dChecked":true,"dCheckedInfo":["Id","Tag"],"Id":["1","kw","String"],"Tag":["1","INPUT","String"]}],"uuid":"material-3b51cd62-af40-4052-bed1-7b2e69fd1c08","level":4,"checked":true,"disabled":true,"hash":"6982bd337e389adafa873efc24b25db7","puuid":"material-e4541c2a-8ca3-4b3d-91a9-87fe7e3ef46d"}],"appName":"谷歌浏览器窗口 - 百度一下,你就知道","elementName":"INPUT_百度搜索框","version":"1.0.0"}
1

更多关于元素Locator的信息,请参见定位器 (opens new window)

# 获取并使用界面元素Locator资源值

获取到界面元素Locator资源值后,支持跨工程传递此参数值,使用界面元素Locator资源值等同于拾取后使用该元素。支持在可视化工作流中或Python工作流中获取、使用界面元素Locator资源值,实现方法略有不同。

# 可视化工作流

# 获取界面元素Locator资源值

  1. 调用getLocator-获取LOCATOR资源 (opens new window)函数,获取目标界面元素的Locator资源。
  2. 调用getData-获取资源值 (opens new window)函数,获取目标界面元素Locator资源的内容。

通过上述方法获取到的界面元素Locator资源值中包含系统默认添加的后缀.toJsonText(),使用界面元素Locator资源值之前,需要预处理删除后缀。具体操作,请参见replace (opens new window)

操作示例:

函数示例:

  CubeResourcePool.获取LOCATOR资源("本地元素库", "INPUT_百度搜索框").获取资源值().替换("({\"app","{\"app",false).替换(").toJsonText()","",false)
1

其中,"本地元素库", "INPUT_百度搜索框"为目标元素唯一标识。

# 使用界面元素Locator资源值

调用findElement-按定位器查找元素 (opens new window)函数,通过目标的界面元素的Locator资源值使用该元素。 操作示例

# Python工作流

# 获取界面元素Locator资源值

通过以下代码示例,获取目标元素的Locator资源值。

import Cube
from . import Resource, print


def main():
    # 获取界面元素locator值
    input_ele_locator = Resource.getLocator("本地元素库&INPUT_百度搜索框")
    button_ele_locator = Resource.getLocator("本地元素库&INPUT_百度一下按钮")
    # return返回多个值时需要注意,用[]包裹转为列表返回
    return [input_ele_locator, button_ele_locator]
    pass
1
2
3
4
5
6
7
8
9
10
11

# 使用界面元素Locator资源值

Python工作流不支持独立发布,请通过调用工作流组件执行指定Python工作流,并在输入参数中传入已获取的界面元素Locator资源值。

Python工作流module1中使用Locator资源值的代码示例如下:

import Cube
from . import Resource, print
from Cube.UIAutomation import WebPage, Window, Element


def main(input_ele_locator:str, button_ele_locator:str):
    # 获取界面元素对象
    input_ele_object = Element.findElement(input_ele_locator)
    button_ele_object = Element.findElement(button_ele_locator)
    pass

1
2
3
4
5
6
7
8
9
10
11
最近更新时间: { "value": "2022-12-27", "effect": true }