| # Copyright 2023 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import pytest |
| |
| from chrome.test.variations import drivers |
| from chrome.test.variations import fixtures |
| from chrome.test.variations.fixtures import test_options |
| from chrome.test.variations.test_utils.driver import DriverUtil |
| from http.server import HTTPServer |
| from selenium.common.exceptions import WebDriverException |
| from selenium.webdriver.common.by import By |
| from selenium.webdriver.support import expected_conditions as EC |
| from selenium.webdriver.support.wait import WebDriverWait |
| |
| |
| def test_load_simple_url(driver_factory: drivers.DriverFactory, |
| local_http_server: HTTPServer, |
| seed_locator: fixtures.SeedLocator, |
| test_options: test_options.TestOptions, |
| add_tag: fixtures.result_sink.AddTag, |
| add_features: fixtures.features.AddFeatures): |
| url = (f'http://localhost:{local_http_server.server_port}') |
| with driver_factory.create_driver( |
| seed_file=seed_locator.get_seed()) as driver: |
| versions = driver.execute_cdp_cmd(cmd='Browser.getVersion', cmd_args={}) |
| # https://chromedevtools.github.io/devtools-protocol/tot/Browser/#method-getVersion |
| # expecting { 'product': 'Chrome/120.0.6090.0' } |
| version = versions['product'].split('/')[1] |
| add_tag('launched_version', version) |
| driver.set_window_size(800, 600) |
| driver.get(url) |
| WebDriverWait(driver, 5).until( |
| EC.presence_of_element_located((By.TAG_NAME, 'body'))) |
| |
| # log features |
| features = DriverUtil(driver, test_options).get_features() |
| add_features(features) |
| |
| |
| def test_basic_rendering(driver_factory: drivers.DriverFactory, |
| local_http_server: HTTPServer, |
| seed_locator: fixtures.SeedLocator, |
| test_options: test_options.TestOptions, |
| skia_gold_util: fixtures.VariationsSkiaGoldUtil, |
| add_features: fixtures.features.AddFeatures): |
| url = (f'http://localhost:{local_http_server.server_port}') |
| with driver_factory.create_driver( |
| seed_file=seed_locator.get_seed()) as driver: |
| driver.set_window_size(800, 600) |
| driver.get(url) |
| body = WebDriverWait(driver, 5).until( |
| EC.presence_of_element_located((By.TAG_NAME, 'body'))) |
| |
| status, error_msg = skia_gold_util.compare( |
| name='body', |
| png_data=skia_gold_util.screenshot_from_element(body)) |
| |
| assert status == 0, error_msg |
| |
| # log features |
| features = DriverUtil(driver, test_options).get_features() |
| add_features(features) |
| |
| |
| def test_load_crash_seed(driver_factory: drivers.DriverFactory, |
| local_http_server: HTTPServer, |
| seed_locator: fixtures.SeedLocator): |
| url = (f'http://localhost:{local_http_server.server_port}') |
| # Launch Chrome normally. |
| with driver_factory.create_driver() as driver: |
| driver.get(url) |
| WebDriverWait(driver, 5).until( |
| EC.presence_of_element_located((By.TAG_NAME, 'body'))) |
| |
| # Launch again with bad seed, expecting a crash. |
| with pytest.raises(WebDriverException): |
| with driver_factory.create_driver( |
| seed_file=seed_locator.get_seed(fixtures.SeedName.CRASH) |
| ) as driver: |
| driver.get(url) |