Add e2e tests for embedder benchmark Change-Id: I78b2274f00dc25dedb2911a92fad17dbbe39bd43 Reviewed-on: https://chromium-review.googlesource.com/c/crossbench/+/7472115 Auto-Submit: Mateusz Zbikowski <zbikowski@google.com> Reviewed-by: Camillo Bruni <cbruni@chromium.org> Commit-Queue: Mateusz Zbikowski <zbikowski@google.com>
diff --git a/crossbench/browsers/webview/webview.py b/crossbench/browsers/webview/webview.py index 78fc7e3..61373a6 100644 --- a/crossbench/browsers/webview/webview.py +++ b/crossbench/browsers/webview/webview.py
@@ -5,6 +5,7 @@ from __future__ import annotations import abc +import re from typing import TYPE_CHECKING, Optional from typing_extensions import override @@ -18,6 +19,10 @@ from crossbench.browsers.version import BrowserVersion +_WEBVIEW_SYSUPDATE_CURRENT_PKG_RE = re.compile( + r"Current WebView package.*:.*\(([a-z.]*),\s+(\d+\.\d+\.\d+\.\d+)\)") + + # TODO: crbug.com/393058910 - Replace this Webview class stub placeholder # once Webview class is properly created. class Webview(ChromeWebDriverAndroid, metaclass=abc.ABCMeta): @@ -33,4 +38,13 @@ def _extract_version(self) -> BrowserVersion: webview_provider = self.platform.sh_stdout("settings", "get", "global", "webview_provider").strip() + if webview_provider == "null": + # If webview_provider is null, we need to use dumpsys webviewupdate + # to get the webview provider package name. + dumpsys_output = self.platform.adb.dumpsys("webviewupdate") + for line in dumpsys_output.splitlines(): + if match := re.search(_WEBVIEW_SYSUPDATE_CURRENT_PKG_RE, line): + webview_provider = match.group(1) + break + return self.version_cls().parse(self.platform.app_version(webview_provider))
diff --git a/tests/end2end/android/test_embedder.py b/tests/end2end/android/test_embedder.py new file mode 100644 index 0000000..ec49637 --- /dev/null +++ b/tests/end2end/android/test_embedder.py
@@ -0,0 +1,55 @@ +# Copyright 2026 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +from __future__ import annotations + +import json +from typing import TYPE_CHECKING + +from crossbench.cli.cli import CrossBenchCLI +from crossbench.parse import NumberParser +from tests import test_helper + +if TYPE_CHECKING: + from tests.test_helper import TestEnv + + +def _browser_config(device_id, adb_path) -> str: + return json.dumps({ + "browser": "com.google.android.googlequicksearchbox", + "driver": { + "type": "adb", + "device_id": device_id, + "adb_bin": adb_path + } + }) + + +def _embedder_config() -> str: + return json.dumps({"js": "return {WSRT: google.timers.load.wsrt}"}) + + +def test_embedder(device_id, adb_path, test_env: TestEnv, adb_root) -> None: + del adb_root + browser_config = _browser_config(device_id, adb_path) + CrossBenchCLI().run(( + "embedder", f"--browser={browser_config}", + "--splashscreen=skip", + f"--cuj-config={test_env.root_dir}/config/team/woa/embedder_cuj_config.hjson", + # TODO(zbikowski): Add this flag once embedder in the emulator image is + # updated. + # "--embedder-process-name=googleapp", + f"--probe=embedder:{_embedder_config()}", + f"--out-dir={test_env.results_dir}" + ) + test_env.cq_flags) + + with (test_env.results_dir / "embedder.csv").open() as csv: + lines = csv.readlines() + error_message = f"csv content: {lines}" + assert "WSRT" in lines[-1], error_message + assert NumberParser.positive_zero_float( + lines[-1].split("\t")[-1]) > 0, error_message + + +if __name__ == "__main__": + test_helper.run_pytest(__file__)