| Index: tools/telemetry/telemetry/page/page_test.py
|
| diff --git a/tools/telemetry/telemetry/page/page_test.py b/tools/telemetry/telemetry/page/page_test.py
|
| deleted file mode 100644
|
| index bb2e5cedc9534a972d810b4f2667e3d7a4fc2ffe..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/page/page_test.py
|
| +++ /dev/null
|
| @@ -1,182 +0,0 @@
|
| -# Copyright 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import logging
|
| -
|
| -from telemetry.core import exceptions
|
| -from telemetry.page import action_runner as action_runner_module
|
| -
|
| -# Export story_test.Failure to this page_test module
|
| -from telemetry.web_perf.story_test import Failure
|
| -
|
| -
|
| -class TestNotSupportedOnPlatformError(Exception):
|
| - """PageTest Exception raised when a required feature is unavailable.
|
| -
|
| - The feature required to run the test could be part of the platform,
|
| - hardware configuration, or browser.
|
| - """
|
| -
|
| -
|
| -class MultiTabTestAppCrashError(Exception):
|
| - """PageTest Exception raised after browser or tab crash for multi-tab tests.
|
| -
|
| - Used to abort the test rather than try to recover from an unknown state.
|
| - """
|
| -
|
| -
|
| -class MeasurementFailure(Failure):
|
| - """PageTest Exception raised when an undesired but designed-for problem."""
|
| -
|
| -
|
| -class PageTest(object):
|
| - """A class styled on unittest.TestCase for creating page-specific tests.
|
| -
|
| - Test should override ValidateAndMeasurePage to perform test
|
| - validation and page measurement as necessary.
|
| -
|
| - class BodyChildElementMeasurement(PageTest):
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - body_child_count = tab.EvaluateJavaScript(
|
| - 'document.body.children.length')
|
| - results.AddValue(scalar.ScalarValue(
|
| - page, 'body_children', 'count', body_child_count))
|
| - """
|
| -
|
| - def __init__(self,
|
| - needs_browser_restart_after_each_page=False,
|
| - clear_cache_before_each_run=False):
|
| - super(PageTest, self).__init__()
|
| -
|
| - self.options = None
|
| - self._needs_browser_restart_after_each_page = (
|
| - needs_browser_restart_after_each_page)
|
| - self._clear_cache_before_each_run = clear_cache_before_each_run
|
| - self._close_tabs_before_run = True
|
| -
|
| - @property
|
| - def is_multi_tab_test(self):
|
| - """Returns True if the test opens multiple tabs.
|
| -
|
| - If the test overrides TabForPage, it is deemed a multi-tab test.
|
| - Multi-tab tests do not retry after tab or browser crashes, whereas,
|
| - single-tab tests too. That is because the state of multi-tab tests
|
| - (e.g., how many tabs are open, etc.) is unknown after crashes.
|
| - """
|
| - return self.TabForPage.__func__ is not PageTest.TabForPage.__func__
|
| -
|
| - @property
|
| - def clear_cache_before_each_run(self):
|
| - """When set to True, the browser's disk and memory cache will be cleared
|
| - before each run."""
|
| - return self._clear_cache_before_each_run
|
| -
|
| - @property
|
| - def close_tabs_before_run(self):
|
| - """When set to True, all tabs are closed before running the test for the
|
| - first time."""
|
| - return self._close_tabs_before_run
|
| -
|
| - @close_tabs_before_run.setter
|
| - def close_tabs_before_run(self, close_tabs):
|
| - self._close_tabs_before_run = close_tabs
|
| -
|
| - def RestartBrowserBeforeEachPage(self):
|
| - """ Should the browser be restarted for the page?
|
| -
|
| - This returns true if the test needs to unconditionally restart the
|
| - browser for each page. It may be called before the browser is started.
|
| - """
|
| - return self._needs_browser_restart_after_each_page
|
| -
|
| - def StopBrowserAfterPage(self, browser, page):
|
| - """Should the browser be stopped after the page is run?
|
| -
|
| - This is called after a page is run to decide whether the browser needs to
|
| - be stopped to clean up its state. If it is stopped, then it will be
|
| - restarted to run the next page.
|
| -
|
| - A test that overrides this can look at both the page and the browser to
|
| - decide whether it needs to stop the browser.
|
| - """
|
| - del browser, page # unused
|
| - return False
|
| -
|
| - def CustomizeBrowserOptions(self, options):
|
| - """Override to add test-specific options to the BrowserOptions object"""
|
| -
|
| - def WillStartBrowser(self, platform):
|
| - """Override to manipulate the browser environment before it launches."""
|
| -
|
| - def DidStartBrowser(self, browser):
|
| - """Override to customize the browser right after it has launched."""
|
| -
|
| - def SetOptions(self, options):
|
| - """Sets the BrowserFinderOptions instance to use."""
|
| - self.options = options
|
| -
|
| - def WillNavigateToPage(self, page, tab):
|
| - """Override to do operations before the page is navigated, notably Telemetry
|
| - will already have performed the following operations on the browser before
|
| - calling this function:
|
| - * Ensure only one tab is open.
|
| - * Call WaitForDocumentReadyStateToComplete on the tab."""
|
| -
|
| - def DidNavigateToPage(self, page, tab):
|
| - """Override to do operations right after the page is navigated and after
|
| - all waiting for completion has occurred."""
|
| -
|
| - def DidRunPage(self, platform):
|
| - """Called after the test run method was run, even if it failed."""
|
| -
|
| - def TabForPage(self, page, browser): # pylint: disable=unused-argument
|
| - """Override to select a different tab for the page. For instance, to
|
| - create a new tab for every page, return browser.tabs.New()."""
|
| - try:
|
| - return browser.tabs[0]
|
| - # The tab may have gone away in some case, so we create a new tab and retry
|
| - # (See crbug.com/496280)
|
| - except exceptions.DevtoolsTargetCrashException as e:
|
| - logging.error('Tab may have crashed: %s' % str(e))
|
| - browser.tabs.New()
|
| - # See comment in shared_page_state.WillRunStory for why this waiting
|
| - # is needed.
|
| - browser.tabs[0].WaitForDocumentReadyStateToBeComplete()
|
| - return browser.tabs[0]
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - """Override to check test assertions and perform measurement.
|
| -
|
| - When adding measurement results, call results.AddValue(...) for
|
| - each result. Raise an exception or add a failure.FailureValue on
|
| - failure. page_test.py also provides several base exception classes
|
| - to use.
|
| -
|
| - Prefer metric value names that are in accordance with python
|
| - variable style. e.g., metric_name. The name 'url' must not be used.
|
| -
|
| - Put together:
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - res = tab.EvaluateJavaScript('2+2')
|
| - if res != 4:
|
| - raise Exception('Oh, wow.')
|
| - results.AddValue(scalar.ScalarValue(
|
| - page, 'two_plus_two', 'count', res))
|
| -
|
| - Args:
|
| - page: A telemetry.page.Page instance.
|
| - tab: A telemetry.core.Tab instance.
|
| - results: A telemetry.results.PageTestResults instance.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - # Deprecated: do not use this hook. (crbug.com/470147)
|
| - def RunNavigateSteps(self, page, tab):
|
| - """Navigates the tab to the page URL attribute.
|
| -
|
| - Runs the 'navigate_steps' page attribute as a compound action.
|
| - """
|
| - action_runner = action_runner_module.ActionRunner(
|
| - tab, skip_waits=page.skip_waits)
|
| - page.RunNavigateSteps(action_runner)
|
|
|