Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Start running webdriver tests #13261

Closed
wants to merge 9 commits into from
@@ -52,7 +52,7 @@ use util::prefs::{PREFS, PrefValue};
use util::thread::spawn_named;
use uuid::Uuid;
use webdriver::command::{AddCookieParameters, GetParameters, JavascriptCommandParameters};
use webdriver::command::{LocatorParameters, Parameters};
use webdriver::command::{LocatorParameters, Parameters, SwitchToWindowParameters};
use webdriver::command::{SendKeysParameters, SwitchToFrameParameters, TimeoutsParameters};
use webdriver::command::{WebDriverCommand, WebDriverExtensionCommand, WebDriverMessage};
use webdriver::command::WindowSizeParameters;
@@ -504,6 +504,20 @@ impl Handler {
}
}

fn handle_dismiss_alert(&mut self) -> WebDriverResult<WebDriverResponse> {
//TODO figure out how to interact with blocking native UI
Ok(WebDriverResponse::Void)
}

fn handle_switch_to_window(&mut self, parameters: &SwitchToWindowParameters) -> WebDriverResult<WebDriverResponse> {
if parameters.handle == self.session.as_ref().unwrap().id.to_string() {
Ok(WebDriverResponse::Void)
} else {
Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,
"Switching to another window is not supported"))
}
}

fn handle_switch_to_frame(&mut self, parameters: &SwitchToFrameParameters) -> WebDriverResult<WebDriverResponse> {
use webdriver::common::FrameId;
let frame_id = match parameters.id {
@@ -873,6 +887,7 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
WebDriverCommand::GetTitle => self.handle_title(),
WebDriverCommand::GetWindowHandle => self.handle_window_handle(),
WebDriverCommand::GetWindowHandles => self.handle_window_handles(),
WebDriverCommand::SwitchToWindow(ref parameters) => self.handle_switch_to_window(parameters),
WebDriverCommand::SwitchToFrame(ref parameters) => self.handle_switch_to_frame(parameters),
WebDriverCommand::SwitchToParentFrame => self.handle_switch_to_parent_frame(),
WebDriverCommand::FindElement(ref parameters) => self.handle_find_element(parameters),
@@ -900,6 +915,7 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
ServoExtensionCommand::ResetPrefs(ref x) => self.handle_reset_prefs(x),
}
}
WebDriverCommand::DismissAlert => self.handle_dismiss_alert(),
_ => Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,
"Command not implemented"))
}
@@ -168,25 +168,28 @@ def fetch(self):
print(cargo_path)
call(["cargo", "fetch"], env=self.build_env())

@Command('wpt-upgrade',
@Command('wptrunner-upgrade',
description='upgrade wptrunner.',
category='devenv')
def upgrade_wpt_runner(self):
env = self.build_env()
with cd(path.join(self.context.topdir, 'tests', 'wpt', 'harness')):
code = call(["git", "init"], env=self.build_env())
code = call(["git", "init"], env=env)
if code:
return code
# No need to report an error if this fails, as it will for the first use
call(["git", "remote", "rm", "upstream"], env=env)
code = call(
["git", "remote", "add", "upstream", "https://github.com/w3c/wptrunner.git"], env=self.build_env())
["git", "remote", "add", "upstream", "https://github.com/w3c/wptrunner.git"], env=env)
if code:
return code
code = call(["git", "fetch", "upstream"], env=self.build_env())
code = call(["git", "fetch", "upstream"], env=env)
if code:
return code
code = call(["git", "reset", "--hard", "remotes/upstream/master"], env=self.build_env())
code = call(["git", "reset", "--hard", "remotes/upstream/master"], env=env)
if code:
return code
code = call(["rm", "-rf", ".git"], env=self.build_env())
code = call(["rm", "-rf", ".git"], env=env)
if code:
return code
return 0
@@ -28,6 +28,7 @@

product_list = ["b2g",
"chrome",
"edge",
"firefox",
"servo",
"servodriver"]
@@ -3,6 +3,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import os
import platform
import subprocess
import sys

@@ -128,10 +129,16 @@ def start(self):
self.profile.set_preferences({"marionette.defaultPrefs.enabled": True,
"marionette.defaultPrefs.port": self.marionette_port,
"dom.disable_open_during_load": False,
"network.dns.localDomains": ",".join(hostnames)})
"network.dns.localDomains": ",".join(hostnames),
"places.history.enabled": False})
if self.e10s:
self.profile.set_preferences({"browser.tabs.remote.autostart": True})

# Bug 1262954: winxp + e10s, disable hwaccel
if (self.e10s and platform.system() in ("Windows", "Microsoft") and
'5.1' in platform.version()):
self.profile.set_preferences({"layers.acceleration.disabled": True})

if self.ca_certificate_path is not None:
self.setup_ssl()

@@ -6,15 +6,16 @@

from .base import NullBrowser, ExecutorBrowser, require_arg
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorservo import ServoTestharnessExecutor, ServoRefTestExecutor
from ..executors.executorservo import ServoTestharnessExecutor, ServoRefTestExecutor, ServoWdspecExecutor

here = os.path.join(os.path.split(__file__)[0])

__wptrunner__ = {"product": "servo",
"check_args": "check_args",
"browser": "ServoBrowser",
"executor": {"testharness": "ServoTestharnessExecutor",
"reftest": "ServoRefTestExecutor"},
"reftest": "ServoRefTestExecutor",
"wdspec": "ServoWdspecExecutor"},
"browser_kwargs": "browser_kwargs",
"executor_kwargs": "executor_kwargs",
"env_options": "env_options",
@@ -17,11 +17,11 @@

errors = None
marionette = None
pytestrunner = None
webdriver = None

here = os.path.join(os.path.split(__file__)[0])

from . import pytestrunner
from .base import (ExecutorException,
Protocol,
RefTestExecutor,
@@ -41,7 +41,7 @@


def do_delayed_imports():
global errors, marionette, webdriver
global errors, marionette

# Marionette client used to be called marionette, recently it changed
# to marionette_driver for unfathomable reasons
@@ -51,8 +51,6 @@ def do_delayed_imports():
except ImportError:
from marionette_driver import marionette, errors

import webdriver


class MarionetteProtocol(Protocol):
def __init__(self, executor, browser):
@@ -292,7 +290,7 @@ def is_alive(self):
class ExecuteAsyncScriptRun(object):
def __init__(self, logger, func, marionette, url, timeout):
self.logger = logger
self.result = None
self.result = (None, None)
self.marionette = marionette
self.func = func
self.url = url
@@ -323,11 +321,9 @@ def run(self):
wait_timeout = None

flag = self.result_flag.wait(wait_timeout)
if self.result is None:
if self.result[1] is None:
self.logger.debug("Timed out waiting for a result")
assert not flag
self.result = False, ("EXTERNAL-TIMEOUT", None)

return self.result

def _run(self):
@@ -409,7 +405,8 @@ def do_testharness(self, marionette, url, timeout):
"timeout": timeout_ms,
"explicit_timeout": timeout is None}

return marionette.execute_async_script(script, new_sandbox=False)
rv = marionette.execute_async_script(script, new_sandbox=False)
return rv


class MarionetteRefTestExecutor(RefTestExecutor):
@@ -487,7 +484,7 @@ def _screenshot(self, marionette, url, timeout):
class WdspecRun(object):
def __init__(self, func, session, path, timeout):
self.func = func
self.result = None
self.result = (None, None)
self.session = session
self.path = path
self.timeout = timeout
@@ -504,8 +501,7 @@ def run(self):
executor.start()

flag = self.result_flag.wait(self.timeout)
if self.result is None:
assert not flag
if self.result[1] is None:
self.result = False, ("EXTERNAL-TIMEOUT", None)

return self.result
@@ -528,6 +524,7 @@ def _run(self):
class MarionetteWdspecExecutor(WdspecExecutor):
def __init__(self, browser, server_config, webdriver_binary,
timeout_multiplier=1, close_after_done=True, debug_info=None):
self.do_delayed_imports()
WdspecExecutor.__init__(self, browser, server_config,
timeout_multiplier=timeout_multiplier,
debug_info=debug_info)
@@ -557,3 +554,8 @@ def do_wdspec(self, session, path, timeout):
harness_result = ("OK", None)
subtest_results = pytestrunner.run(path, session, timeout=timeout)
return (harness_result, subtest_results)

def do_delayed_imports(self):
global pytestrunner, webdriver
from . import pytestrunner
from tools import webdriver
@@ -22,20 +22,21 @@
strip_server)
from ..testrunner import Stop


here = os.path.join(os.path.split(__file__)[0])

webdriver = None
exceptions = None
RemoteConnection = None

extra_timeout = 5

def do_delayed_imports():
global webdriver
global exceptions
global RemoteConnection
from selenium import webdriver
from selenium.common import exceptions

from selenium.webdriver.remote.remote_connection import RemoteConnection

class SeleniumProtocol(Protocol):
def __init__(self, executor, browser, capabilities, **kwargs):
@@ -53,8 +54,9 @@ def setup(self, runner):

session_started = False
try:
self.webdriver = webdriver.Remote(
self.url, desired_capabilities=self.capabilities)
self.webdriver = webdriver.Remote(command_executor=RemoteConnection(self.url.strip("/"),
resolve_ip=False),
desired_capabilities=self.capabilities)
except:
self.logger.warning(
"Connecting to Selenium failed:\n%s" % traceback.format_exc())
@@ -231,17 +233,7 @@ def is_alive(self):
def do_test(self, test):
self.logger.info("Test requires OS-level window focus")

if self.close_after_done and self.has_window:
self.protocol.webdriver.close()
self.protocol.webdriver.switch_to_window(
self.protocol.webdriver.window_handles[-1])
self.has_window = False

if not self.has_window:
self.protocol.webdriver.execute_script(self.script)
self.protocol.webdriver.switch_to_window(
self.protocol.webdriver.window_handles[-1])
self.has_window = True
self.protocol.webdriver.set_window_size(600, 600)

result = self.implementation.run_test(test)

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.