Maestro UI 测试:我可以对选择器标识的多个项目执行操作吗?

问题描述 投票:0回答:1

我的应用程序中有一个项目列表,例如:

  • 第 1 项
  • 第 2 项
  • 第 2 项
  • 第 2 项
  • 第 3 项

我希望能够对一组匹配的项目执行操作(删除)(例如,如果文本是“项目 2”)。当列表很长时,某些项目可能在屏幕上不可见。

我可以看到有一个

index
用于在匹配项中进行选择,我还可以看到有一个
containsDescendants
选择器(我认为它可能与父视图匹配,不一定与列表匹配?)但我不清楚是否可以使用这些的某种组合来迭代零个或多个匹配项。

目标是说:“当屏幕中存在包含此文本的元素(可能在视线之外)时,请向下滚动直至其可见并执行删除操作”。

理想情况下我想:

- runFlow:
    when:
      containsDescendants: Item 2 # Keep looping while the list contains any matching items
    commands:
      - scrollUntilVisible:
          element: Item 2 # Scroll down to the item
      - LongPressOn: Item 2
      - tapOn: Delete
      

我发现这行不通。我想知道这是否可能,如果可以,语法是什么?

maestro
1个回答
0
投票

我会检查repeat命令。我认为这会让你接近你想要的;虽然我不确定如果元素不在屏幕上它是否会起作用;为此,您可能需要使用:

  • a 向下滑动而不是
    scrollUntilVisible
    ;你不能真正滚动直到一个可能不存在的目标,如果不存在它就会失败,我不认为。您可能需要使用坐标和多次滑动,具体取决于列表的长度。 (不过,就我个人而言,我会尝试设置您的测试数据,使列表的长度保持不变,并且如果需要,只需在多个测试中测试多个长度;而不是尝试编写一个测试来解释列表可能是任意长度。)
  • a 有条件

我想你最终的结果可能是这样的:

- repeat:
    while:
      visible: "Item 2"
    commands:
      - longPressOn: "Item 2"
      - tapOn: Delete
- swipe:
    direction: DOWN
- runFlow:
    when:
      visible: "Item 2"
    commands:
        - longPressOn: "Item 2"
        - tapOn: Delete

© www.soinside.com 2019 - 2024. All rights reserved.