WebDriver: add support for test expectations
[WebKit-https.git] / Tools / Scripts / webkitpy / webdriver_tests / webdriver_selenium_executor.py
1 # Copyright (C) 2017 Igalia S.L.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions
5 # are met:
6 # 1.  Redistributions of source code must retain the above copyright
7 #     notice, this list of conditions and the following disclaimer.
8 # 2.  Redistributions in binary form must reproduce the above copyright
9 #     notice, this list of conditions and the following disclaimer in the
10 #     documentation and/or other materials provided with the distribution.
11 #
12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
13 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
16 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
17 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
18 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
19 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
20 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
23 import logging
24 import os
25 import sys
26
27 from webkitpy.common.system.filesystem import FileSystem
28 from webkitpy.common.webkit_finder import WebKitFinder
29
30 pytest_runner = None
31
32
33 def do_delayed_imports():
34     global pytest_runner
35     import webkitpy.webdriver_tests.pytest_runner as pytest_runner
36
37
38 _log = logging.getLogger(__name__)
39
40
41 class WebDriverSeleniumExecutor(object):
42
43     def __init__(self, driver, display_driver):
44         self._env = display_driver._setup_environ_for_test()
45         self._env.update(driver.browser_env())
46
47         self._args = ['--driver=%s' % driver.selenium_name(), '--driver-binary=%s' % driver.binary_path().encode()]
48         browser_path = driver.browser_path().encode()
49         if browser_path:
50             self._args.extend(['--browser-binary=%s' % browser_path])
51         browser_args = driver.browser_args()
52         if browser_args:
53             self._args.extend(['--browser-args=%s' % ' '.join(browser_args)])
54
55         if pytest_runner is None:
56             do_delayed_imports()
57
58     def collect(self, directory):
59         return pytest_runner.collect(directory, self._args)
60
61     def run(self, test, timeout, expectations):
62         return pytest_runner.run(test, self._args, timeout, self._env, expectations)