def step()

in evals/elsuite/multistep_web_tasks/webarena/browser_env/basic_browser_env.py [0:0]


    def step(self, action: BrowserAction) -> BrowserEnvOutput:
        if not self.reset_finished:
            raise RuntimeError("Call reset first before calling step.")

        # handle stop separately
        if action.data["action_type"] == BrowserActionTypes.STOP:
            return BrowserEnvOutput(
                observation=self._get_obs(),
                reward=0.0,
                done=True,
                truncated=False,
                info=PageInfo(
                    page=DetachedPage(self.page.url, self.page.content()),
                    fail_error="",
                    observation_metadata=self._get_obs_metadata(),
                ),
            )

        success = False
        fail_error = ""
        previous_obs = self._get_obs()
        try:
            execute_action(
                action,
                self.page,
                self.observation_handler.action_processor,
            )
            success = True
        except Exception as e:
            logger.warning(f"Failed to execute action {action}: {e}")
            fail_error = str(e)

        # hard sleep TODO[shuyanzh] suboptimal, may need to check network
        if self.sleep_after_execution > 0:
            time.sleep(self.sleep_after_execution)

        observation = self._get_obs()
        if observation.data == previous_obs.data:
            logger.warning(
                f"\nObservation did not change after executing action:\n{action}\n=====\n"
            )
        observation_metadata = self._get_obs_metadata()

        info = PageInfo(
            page=DetachedPage(self.page.url, self.page.content()),
            fail_error=fail_error,
            observation_metadata=observation_metadata,
        )
        env_output = BrowserEnvOutput(
            observation=observation,
            reward=float(success),
            done=False,
            truncated=False,
            info=info,
        )
        return env_output