宁静剧本 - 目标列表

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

我正在使用 Java 编写的 Serenity 剧本。我有一个包含一些选项的下拉列表,我想断言选项下拉列表有 X 个选项。我一直在使用

Target
类来查找元素并断言它们包含正确的文本等,但我的每个目标都是针对单个元素的。我想获取目标列表,然后断言该列表中有 X 个元素。

我在 Serenity/JS 库中找到了一个名为

TargetElements
的类(https://serenity-js.org/modules/protractor/class/src/screenplay/questions/targets/TargetElements.ts~TargetElements.html)这看起来正是我所需要的,但它在 Java 版本的 Serenity 中不可用。

这是我使用的典型

Target
的示例:

    public static final Target OPTIONS_LIST_FIELD = Target.the("options field")
                        .located(By.cssSelector("div[data-testid='option_field']"));

我想做这样的事情:

    public static final List<Target> OPTIONS_LIST = Target.all("options")
                        .located(By.cssSelector("div[data-testid='option']"));

    assertThat(OPTIONS_LIST.size(), equalTo(6))
web-testing serenity-bdd cucumber-serenity
1个回答
1
投票

Target
是一个抽象类,其预期用途是能够定位和解析网页上的元素。这将为您提供
ByTarget
XPathOrCssTarget
的实例。

核心,目标应该是获取 WebElements 列表(Serenity 中的

WebElementFacade
),可以在其上执行操作或解析以断言数据。

以下满足大部分要求:

List<String> webElementsValues = Target.the("options field").located(By.cssSelector("div[data-testid='option_field']")).resolveForAll(new Actor("Stack")).texts();

List<WebElementFacade> webElements = Target.the("options field").located(By.cssSelector("div[data-testid='option_field']")).resolveForAll(new Actor("Stack"));

但是,如果您仍然想要

List<Target>
元素,可以采用以下方法,这可能需要根据您的应用程序进行一些调整。

public static List<Target> getListOfTargetElements() {

int sizeOfOptions = Target.the("Parent Element").locatedBy("//..locate your element here").resolveAllFor(new Actor("byteish")).size();
    List<Target> listOfTarget = new ArrayList();
    for (int i = 0; i<sizeOfOptions;i++){
        listOfTarget.add(Target.the("element:"+i).locatedBy("div/eleme["+i+"]"));
    }

    return listOfTarget;
}
© www.soinside.com 2019 - 2024. All rights reserved.