You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java版Serenity Screenplay如何断言下拉选项数量?

Java版Serenity Screenplay断言下拉列表选项数量问题

我正在使用Java版Serenity Screenplay框架,需要断言一个带选项的下拉列表的选项数量为X个。此前一直用Target类定位元素并断言文本等内容,但每个Target仅对应单个元素。我希望获取一个Target列表,进而断言该列表的元素数量为X个。

我了解到Serenity/JS库中有对应工具类,但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))

解决方案

在Java版Serenity Screenplay中,无需额外类即可实现需求,以下是两种可行方式:

  1. 自定义Question(符合Screenplay模式)
    通过自定义Question封装元素数量的获取逻辑,更贴合框架设计风格:

    // 定义获取选项数量的Question类
    public class OptionCount implements Question<Integer> {
        private final Target target;
    
        private OptionCount(Target target) {
            this.target = target;
        }
    
        public static OptionCount of(Target target) {
            return new OptionCount(target);
        }
    
        @Override
        public Integer answeredBy(Actor actor) {
            return target.resolveAllFor(actor).size();
        }
    }
    
    // 定位所有下拉选项的Target
    public static final Target DROPDOWN_OPTIONS = Target.the("下拉选项")
            .located(By.cssSelector("div[data-testid='option']"));
    
    // 在测试中执行断言
    actor.should(
            seeThat("下拉选项数量", OptionCount.of(DROPDOWN_OPTIONS), equalTo(6))
    );
    
  2. 直接获取元素列表断言
    若不需要复用逻辑,可直接在测试步骤中调用resolveAllFor方法获取元素列表并断言:

    // 定位所有下拉选项的Target
    public static final Target DROPDOWN_OPTIONS = Target.the("下拉选项")
            .located(By.cssSelector("div[data-testid='option']"));
    
    // 测试步骤中直接断言
    List<WebElement> options = DROPDOWN_OPTIONS.resolveAllFor(actor);
    assertThat(options.size(), equalTo(6));
    

关键说明

Java版Serenity的Target类本身提供resolveAllFor(Actor)方法,可直接返回匹配该定位器的所有元素列表,不需要依赖额外类。第一种方式更符合Screenplay模式的关注点分离原则,适合需要复用的场景;第二种方式则更简洁,适合简单的单次断言场景。


内容的提问来源于stack exchange,提问作者Mo0rBy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:01:45