如何在 Geb 测试中使用 siblings() 和 closest()

How to use siblings() and closest() in Geb test

我正在尝试编写一个脚本来单击属于 table header 的图标。 table 中的每一列都有这个图标(升序和降序排序图标)。我正在使用 Geb 来执行此操作。以下是我的尝试方式:

在我的 SortingSpec.groovy 文件中:

header.closest("div.customSortDownLabel").click()

我也试过了

header.siblings('div.customSortDownLabel').first().click()

SortingPage.groovy 文件中:

header {
    grid.$(class: 'div.customHeaderLabel', text: 'Country')
}

在我的 html:

<div>
    <div class="customHeaderLabel">{{params.displayName}}</div>
    <div *ngIf="params.enableSorting" (click)="onSortRequested('asc', $event)" [ngClass]="ascSort" class="customSortDownLabel">
        <i class="fa fa-long-arrow-alt-down"></i></div>
    <div *ngIf="params.enableSorting" (click)="onSortRequested('desc', $event)" [ngClass]="descSort" class="customSortUpLabel">
</div>

None 其中对我有用。它无法找到选择器。任何建议表示赞赏。

我看到的错误是:

geb.error.RequiredPageContentNotPresent: The required page content 'header - SimplePageContent (owner: SortingGrid, args: [], value: null)' is not present

该错误看起来 header 不匹配。假设网格匹配,并且您正在使用一些 Javascript 框架,例如 Angular 将 'Country' 替换为 params.displayName,我猜 Geb 可能无法找到 header 在 'Country' 被替换之前。所以,我会尝试让 header 等待它:

header(wait: true) { grid.$(class: 'div.customHeaderLabel', text: 'Country') }

顺便说一句,closest() 走错了方向,去往祖先,但 siblings() 看起来不错。

siblings() 对我不起作用,但 next() 对我有用。 next() 获取当前上下文元素的下一个兄弟元素。

示例: 1. header.next().click() 点击下一个兄弟

  1. header.next("div.customSortDownLabel").click() 查找具有 'div.customSortDownLabel' 匹配选择器的下一个同级,然后单击它。