Skip to content

Events API

screenwright.events

Event definitions -- Shared Kernel.

AbilityGranted dataclass

Bases: Event

An Ability has been granted to an Actor.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class AbilityGranted(Event):
    """An Ability has been granted to an Actor."""

    event_type: ClassVar[str] = "ability_granted"
    actor_name: str = ""
    ability_name: str = ""
    ability_type: str = ""

ActorEnteredStage dataclass

Bases: Event

An Actor has been placed on the Stage.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class ActorEnteredStage(Event):
    """An Actor has been placed on the Stage."""

    event_type: ClassVar[str] = "actor_entered_stage"
    actor_name: str = ""
    description: str | None = None

ActorExitedStage dataclass

Bases: Event

An Actor has been cleaned up at Scene end.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class ActorExitedStage(Event):
    """An Actor has been cleaned up at Scene end."""

    event_type: ClassVar[str] = "actor_exited_stage"
    actor_name: str = ""

Event dataclass

Base class for all domain events.

Every event is immutable (frozen dataclass), has a unique ID, and a UTC timestamp. The event_type class variable is a string identifier used for serialization dispatch.

Source code in src/screenwright/events/base.py
@dataclass(frozen=True)
class Event:
    """Base class for all domain events.

    Every event is immutable (frozen dataclass), has a unique ID,
    and a UTC timestamp. The event_type class variable is a string
    identifier used for serialization dispatch.
    """

    event_id: str = field(default_factory=lambda: str(uuid.uuid4()))
    timestamp: datetime.datetime = field(
        default_factory=lambda: datetime.datetime.now(datetime.UTC)
    )

    event_type: ClassVar[str] = "event"

    def to_dict(self) -> dict[str, object]:
        """Serialize this event to a dictionary.

        Returns:
            A dict with all fields, including event_type from the class.
        """
        from dataclasses import fields as dc_fields

        result: dict[str, object] = {"event_type": type(self).event_type}
        for f in dc_fields(self):
            value = getattr(self, f.name)
            if isinstance(value, datetime.datetime):
                result[f.name] = value.isoformat()
            elif isinstance(value, list):
                result[f.name] = list(value)
            else:
                result[f.name] = value
        return result

to_dict()

Serialize this event to a dictionary.

Returns:

Type Description
dict[str, object]

A dict with all fields, including event_type from the class.

Source code in src/screenwright/events/base.py
def to_dict(self) -> dict[str, object]:
    """Serialize this event to a dictionary.

    Returns:
        A dict with all fields, including event_type from the class.
    """
    from dataclasses import fields as dc_fields

    result: dict[str, object] = {"event_type": type(self).event_type}
    for f in dc_fields(self):
        value = getattr(self, f.name)
        if isinstance(value, datetime.datetime):
            result[f.name] = value.isoformat()
        elif isinstance(value, list):
            result[f.name] = list(value)
        else:
            result[f.name] = value
    return result

FactRemembered dataclass

Bases: Event

A Fact has been stored by an Actor.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class FactRemembered(Event):
    """A Fact has been stored by an Actor."""

    event_type: ClassVar[str] = "fact_remembered"
    actor_name: str = ""
    fact_key: str = ""
    fact_value_summary: str = ""

FeatureEnded dataclass

Bases: Event

A BDD Feature file has completed execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class FeatureEnded(Event):
    """A BDD Feature file has completed execution."""

    event_type: ClassVar[str] = "feature_ended"
    feature_name: str = ""
    total_scenarios: int = 0
    passed: int = 0
    failed: int = 0
    skipped: int = 0
    duration_ms: float = 0.0

FeatureStarted dataclass

Bases: Event

A BDD Feature file has begun execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class FeatureStarted(Event):
    """A BDD Feature file has begun execution."""

    event_type: ClassVar[str] = "feature_started"
    feature_name: str = ""
    feature_path: str = ""

InteractionCompleted dataclass

Bases: Event

An Interaction has completed successfully.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class InteractionCompleted(Event):
    """An Interaction has completed successfully."""

    event_type: ClassVar[str] = "interaction_completed"
    actor_name: str = ""
    interaction_name: str = ""
    duration_ms: float = 0.0

InteractionFailed dataclass

Bases: Event

An Interaction has failed with an error.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class InteractionFailed(Event):
    """An Interaction has failed with an error."""

    event_type: ClassVar[str] = "interaction_failed"
    actor_name: str = ""
    interaction_name: str = ""
    error_type: str = ""
    error_message: str = ""
    duration_ms: float = 0.0

InteractionStarted dataclass

Bases: Event

An Actor has begun executing an Interaction.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class InteractionStarted(Event):
    """An Actor has begun executing an Interaction."""

    event_type: ClassVar[str] = "interaction_started"
    actor_name: str = ""
    interaction_name: str = ""
    target: str | None = None
    parent_id: str | None = None

Outcome

Bases: StrEnum

Possible outcomes for a scenario or step.

Source code in src/screenwright/events/base.py
class Outcome(StrEnum):
    """Possible outcomes for a scenario or step."""

    PASSED = "passed"
    FAILED = "failed"
    SKIPPED = "skipped"
    ERROR = "error"

QuestionAnswered dataclass

Bases: Event

A Question has been answered with a value.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class QuestionAnswered(Event):
    """A Question has been answered with a value."""

    event_type: ClassVar[str] = "question_answered"
    actor_name: str = ""
    question_name: str = ""
    answer_summary: str = ""
    duration_ms: float = 0.0

QuestionAsked dataclass

Bases: Event

An Actor has asked a Question.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class QuestionAsked(Event):
    """An Actor has asked a Question."""

    event_type: ClassVar[str] = "question_asked"
    actor_name: str = ""
    question_name: str = ""
    parent_id: str | None = None

SceneEnded dataclass

Bases: Event

A BDD Scenario (Scene) has completed execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class SceneEnded(Event):
    """A BDD Scenario (Scene) has completed execution."""

    event_type: ClassVar[str] = "scene_ended"
    scene_name: str = ""
    feature_name: str = ""
    outcome: str = ""
    duration_ms: float = 0.0
    error_type: str | None = None
    error_message: str | None = None

SceneStarted dataclass

Bases: Event

A BDD Scenario (Scene) has begun execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class SceneStarted(Event):
    """A BDD Scenario (Scene) has begun execution."""

    event_type: ClassVar[str] = "scene_started"
    scene_name: str = ""
    feature_name: str = ""
    tags: list[str] = field(default_factory=list)

SpotlightChanged dataclass

Bases: Event

The Spotlight has shifted to a different Actor.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class SpotlightChanged(Event):
    """The Spotlight has shifted to a different Actor."""

    event_type: ClassVar[str] = "spotlight_changed"
    previous_actor: str | None = None
    current_actor: str = ""

TaskCompleted dataclass

Bases: Event

An Actor has finished performing a Task successfully.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class TaskCompleted(Event):
    """An Actor has finished performing a Task successfully."""

    event_type: ClassVar[str] = "task_completed"
    actor_name: str = ""
    task_name: str = ""
    duration_ms: float = 0.0

TaskFailed dataclass

Bases: Event

A Task has failed with an error.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class TaskFailed(Event):
    """A Task has failed with an error."""

    event_type: ClassVar[str] = "task_failed"
    actor_name: str = ""
    task_name: str = ""
    error_type: str = ""
    error_message: str = ""
    duration_ms: float = 0.0

TaskStarted dataclass

Bases: Event

An Actor has begun performing a Task.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class TaskStarted(Event):
    """An Actor has begun performing a Task."""

    event_type: ClassVar[str] = "task_started"
    actor_name: str = ""
    task_name: str = ""
    parent_id: str | None = None

base

Base Event class and Outcome enum for domain events.

Event dataclass

Base class for all domain events.

Every event is immutable (frozen dataclass), has a unique ID, and a UTC timestamp. The event_type class variable is a string identifier used for serialization dispatch.

Source code in src/screenwright/events/base.py
@dataclass(frozen=True)
class Event:
    """Base class for all domain events.

    Every event is immutable (frozen dataclass), has a unique ID,
    and a UTC timestamp. The event_type class variable is a string
    identifier used for serialization dispatch.
    """

    event_id: str = field(default_factory=lambda: str(uuid.uuid4()))
    timestamp: datetime.datetime = field(
        default_factory=lambda: datetime.datetime.now(datetime.UTC)
    )

    event_type: ClassVar[str] = "event"

    def to_dict(self) -> dict[str, object]:
        """Serialize this event to a dictionary.

        Returns:
            A dict with all fields, including event_type from the class.
        """
        from dataclasses import fields as dc_fields

        result: dict[str, object] = {"event_type": type(self).event_type}
        for f in dc_fields(self):
            value = getattr(self, f.name)
            if isinstance(value, datetime.datetime):
                result[f.name] = value.isoformat()
            elif isinstance(value, list):
                result[f.name] = list(value)
            else:
                result[f.name] = value
        return result
to_dict()

Serialize this event to a dictionary.

Returns:

Type Description
dict[str, object]

A dict with all fields, including event_type from the class.

Source code in src/screenwright/events/base.py
def to_dict(self) -> dict[str, object]:
    """Serialize this event to a dictionary.

    Returns:
        A dict with all fields, including event_type from the class.
    """
    from dataclasses import fields as dc_fields

    result: dict[str, object] = {"event_type": type(self).event_type}
    for f in dc_fields(self):
        value = getattr(self, f.name)
        if isinstance(value, datetime.datetime):
            result[f.name] = value.isoformat()
        elif isinstance(value, list):
            result[f.name] = list(value)
        else:
            result[f.name] = value
    return result

Outcome

Bases: StrEnum

Possible outcomes for a scenario or step.

Source code in src/screenwright/events/base.py
class Outcome(StrEnum):
    """Possible outcomes for a scenario or step."""

    PASSED = "passed"
    FAILED = "failed"
    SKIPPED = "skipped"
    ERROR = "error"

bdd

BDD Integration events -- emitted during feature and scenario lifecycle.

FeatureEnded dataclass

Bases: Event

A BDD Feature file has completed execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class FeatureEnded(Event):
    """A BDD Feature file has completed execution."""

    event_type: ClassVar[str] = "feature_ended"
    feature_name: str = ""
    total_scenarios: int = 0
    passed: int = 0
    failed: int = 0
    skipped: int = 0
    duration_ms: float = 0.0

FeatureStarted dataclass

Bases: Event

A BDD Feature file has begun execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class FeatureStarted(Event):
    """A BDD Feature file has begun execution."""

    event_type: ClassVar[str] = "feature_started"
    feature_name: str = ""
    feature_path: str = ""

SceneEnded dataclass

Bases: Event

A BDD Scenario (Scene) has completed execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class SceneEnded(Event):
    """A BDD Scenario (Scene) has completed execution."""

    event_type: ClassVar[str] = "scene_ended"
    scene_name: str = ""
    feature_name: str = ""
    outcome: str = ""
    duration_ms: float = 0.0
    error_type: str | None = None
    error_message: str | None = None

SceneStarted dataclass

Bases: Event

A BDD Scenario (Scene) has begun execution.

Source code in src/screenwright/events/bdd.py
@dataclass(frozen=True)
class SceneStarted(Event):
    """A BDD Scenario (Scene) has begun execution."""

    event_type: ClassVar[str] = "scene_started"
    scene_name: str = ""
    feature_name: str = ""
    tags: list[str] = field(default_factory=list)

screenplay

Screenplay Engine events -- emitted by the core domain during test execution.

AbilityGranted dataclass

Bases: Event

An Ability has been granted to an Actor.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class AbilityGranted(Event):
    """An Ability has been granted to an Actor."""

    event_type: ClassVar[str] = "ability_granted"
    actor_name: str = ""
    ability_name: str = ""
    ability_type: str = ""

ActorEnteredStage dataclass

Bases: Event

An Actor has been placed on the Stage.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class ActorEnteredStage(Event):
    """An Actor has been placed on the Stage."""

    event_type: ClassVar[str] = "actor_entered_stage"
    actor_name: str = ""
    description: str | None = None

ActorExitedStage dataclass

Bases: Event

An Actor has been cleaned up at Scene end.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class ActorExitedStage(Event):
    """An Actor has been cleaned up at Scene end."""

    event_type: ClassVar[str] = "actor_exited_stage"
    actor_name: str = ""

FactRemembered dataclass

Bases: Event

A Fact has been stored by an Actor.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class FactRemembered(Event):
    """A Fact has been stored by an Actor."""

    event_type: ClassVar[str] = "fact_remembered"
    actor_name: str = ""
    fact_key: str = ""
    fact_value_summary: str = ""

InteractionCompleted dataclass

Bases: Event

An Interaction has completed successfully.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class InteractionCompleted(Event):
    """An Interaction has completed successfully."""

    event_type: ClassVar[str] = "interaction_completed"
    actor_name: str = ""
    interaction_name: str = ""
    duration_ms: float = 0.0

InteractionFailed dataclass

Bases: Event

An Interaction has failed with an error.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class InteractionFailed(Event):
    """An Interaction has failed with an error."""

    event_type: ClassVar[str] = "interaction_failed"
    actor_name: str = ""
    interaction_name: str = ""
    error_type: str = ""
    error_message: str = ""
    duration_ms: float = 0.0

InteractionStarted dataclass

Bases: Event

An Actor has begun executing an Interaction.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class InteractionStarted(Event):
    """An Actor has begun executing an Interaction."""

    event_type: ClassVar[str] = "interaction_started"
    actor_name: str = ""
    interaction_name: str = ""
    target: str | None = None
    parent_id: str | None = None

QuestionAnswered dataclass

Bases: Event

A Question has been answered with a value.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class QuestionAnswered(Event):
    """A Question has been answered with a value."""

    event_type: ClassVar[str] = "question_answered"
    actor_name: str = ""
    question_name: str = ""
    answer_summary: str = ""
    duration_ms: float = 0.0

QuestionAsked dataclass

Bases: Event

An Actor has asked a Question.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class QuestionAsked(Event):
    """An Actor has asked a Question."""

    event_type: ClassVar[str] = "question_asked"
    actor_name: str = ""
    question_name: str = ""
    parent_id: str | None = None

SpotlightChanged dataclass

Bases: Event

The Spotlight has shifted to a different Actor.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class SpotlightChanged(Event):
    """The Spotlight has shifted to a different Actor."""

    event_type: ClassVar[str] = "spotlight_changed"
    previous_actor: str | None = None
    current_actor: str = ""

TaskCompleted dataclass

Bases: Event

An Actor has finished performing a Task successfully.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class TaskCompleted(Event):
    """An Actor has finished performing a Task successfully."""

    event_type: ClassVar[str] = "task_completed"
    actor_name: str = ""
    task_name: str = ""
    duration_ms: float = 0.0

TaskFailed dataclass

Bases: Event

A Task has failed with an error.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class TaskFailed(Event):
    """A Task has failed with an error."""

    event_type: ClassVar[str] = "task_failed"
    actor_name: str = ""
    task_name: str = ""
    error_type: str = ""
    error_message: str = ""
    duration_ms: float = 0.0

TaskStarted dataclass

Bases: Event

An Actor has begun performing a Task.

Source code in src/screenwright/events/screenplay.py
@dataclass(frozen=True)
class TaskStarted(Event):
    """An Actor has begun performing a Task."""

    event_type: ClassVar[str] = "task_started"
    actor_name: str = ""
    task_name: str = ""
    parent_id: str | None = None