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

Implement WebDriver executor for wptrunner #12380

Merged
merged 3 commits into from
Sep 7, 2018

Conversation

gsnedders
Copy link
Member

@gsnedders gsnedders commented Aug 9, 2018

Taken over #10197. Fixes #12374.

  • Decide what to do with capabilities and how to pass W3C-style capabilities in (see Implement WebDriver executor for wptrunner #12380 (review))
  • Test Edge stable to see if this works with that
  • Figure out how to deal with Safari (stable needs the legacy protocol; TP works fine with W3C)
  • Test this (somehow)

This change is Reviewable

@wpt-pr-bot wpt-pr-bot added infra webdriver wg-testing_browser wpt wptrunner The automated test runner, commonly called through ./wpt run labels Aug 9, 2018
@wpt-pr-bot wpt-pr-bot requested a review from jgraham August 9, 2018 15:33
@gsnedders
Copy link
Member Author

OK, so the status of running /infrastructure against Chrome is:

  • We currently add a set_legacy to client.Timeouts to workaround ChromeDriver #2057 (fixed in ChromeDriver master, unverified here)
  • infrastructure/reftest/reftest_timeout.html and infrastructure/reftest/reftest_ref_timeout.html fail because of ChromeDriver #2001
  • infrastructure/testdriver/send_keys.html because of ChromeDriver #1999

cc/ @foolip @JohnChen0

}
}
},
"w3c": True
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gsnedders
Copy link
Member Author

Safari Technology Preview seems to work fine with the new executor, based on /infrastructure.

@foolip
Copy link
Member

foolip commented Aug 13, 2018

Perhaps a good way to validate is to somehow trigger a full Taskcluster Chrome run with this enabled, and comparing the results?

@foolip foolip mentioned this pull request Aug 13, 2018
7 tasks
@gsnedders
Copy link
Member Author

So at least for Safari we need the old Selenium codepath for stable Safari. Maybe Edge as well?

@foolip
Copy link
Member

foolip commented Aug 13, 2018

Hmm, is this because SafariDriver and EdgeDriver only recently began supporting the WebDriver protocol?

@gsnedders
Copy link
Member Author

For Safari, yes.

For Edge, I haven't tried yet.

Copy link
Contributor

@jgraham jgraham left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 9 of 11 files at r2.
Reviewable status: all files reviewed, 3 unresolved discussions (waiting on @gsnedders, @AutomatedTester, @whimboo, @shs96c, @andreastt, and @mjzffr)


tools/wptrunner/wptrunner/browsers/chrome_webdriver.py, line 9 at r2 (raw file):

                                           WebDriverRefTestExecutor)  # noqa: F401

__wptrunner__ = deepcopy(chrome.__wptrunner__)

Can you create an inherit function in base.py that encapsulates this logic?


tools/wptrunner/wptrunner/executors/executorwebdriver.py, line 332 at r2 (raw file):

                                 debug_info=debug_info)
        self.protocol = WebDriverProtocol(self, browser,
                                         capabilities=capabilities)

Indentation is wrong


webdriver/tests/support/fixtures.py, line 210 at r2 (raw file):

    caps = copy.deepcopy(configuration["capabilities"])

    if "alwaysMatch" in caps or "firstMatch" in caps:

This change seems unrelated?

Copy link
Member Author

@gsnedders gsnedders left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 3 unresolved discussions (waiting on @gsnedders, @AutomatedTester, @whimboo, @shs96c, @andreastt, and @mjzffr)


tools/wptrunner/wptrunner/browsers/chrome_webdriver.py, line 9 at r2 (raw file):

Previously, jgraham wrote…

Can you create an inherit function in base.py that encapsulates this logic?

FWIW, I was hoping we could get rid of most of this before landing by dropping the Selenium code paths.


webdriver/tests/support/fixtures.py, line 210 at r2 (raw file):

Previously, jgraham wrote…

This change seems unrelated?

We need to pass W3C-style capabilities to ChromeDriver, so executor_kwargs needs to return them.

Without this, we need to return Selenium style for wdspec (because otherwise we'll end up with caps['alwaysMatch']['alwaysMatch'] and that doesn't work at all, because it fails to match alwaysMatch) and W3C-style for all other test types.

@gsnedders
Copy link
Member Author

Should make sure this avoids copying over #12578.

@gsnedders
Copy link
Member Author

FWIW, I'd much prefer having #12697 fixed so we can see /infrastructure working the same with Selenium and WebDriver.

@gsnedders
Copy link
Member Author

gsnedders commented Aug 28, 2018

Figure out how to deal with Safari (stable needs the legacy protocol; TP works fine with W3C)

This is awkward, because we currently don't have any way of getting the Safari version ahead-of-time (which we need because we need to change what browser module we load, because loading of executors is tightly coupled to the browser module). Even adding something to the Safari browser module (like with #12719) doesn't really help.

I wonder if we should uncouple them? Probably.

@foolip
Copy link
Member

foolip commented Aug 30, 2018

It's likely that the upcoming Safari stable release will have a new enough SafariDriver that we'll be able to use ExecutorWebDriver for both Safari stable and TP. I'd suggest leaving Safari on ExecutorSelenium until then.

@gsnedders
Copy link
Member Author

Edge stable doesn't work (and like Safari, it nowhere near works). Not actually tested RS5_RELEASE (due to ship in October), but RS_PRERELEASE definitely works.

Guess we stick with Selenium for Edge and Safari, so only Chromium actually moves over by default. :(

@foolip
Copy link
Member

foolip commented Aug 30, 2018

Guess we stick with Selenium for Edge and Safari, so only Chromium actually moves over by default. :(

That is indeed unfortunate, but hopefully we'll be able to move them over and delete the Selenium executor before the end of the year?

@gsnedders
Copy link
Member Author

So what's the testing plan here? Get someone to run all of WPT locally with/without? Probably with both the small changes to the Selenium executor and the WebDriver one v. the merge base… We still don't have any better way to run everything, do we? :(

@gsnedders
Copy link
Member Author

From IRC last Friday:

21:40 < jgraham> gsnedders: I mean you can land it without testing it at all if it's not on by 
                 default
21:41 < jgraham> gsnedders: And you can easily test it on taskcluster if you enable the TC app on 
                 a fork and then push the change to enable it there (you'll need to write a script 
                 to download the results, but it's not hard)
21:41 < jgraham> If you apporve my changes then you won't have to change any configuration either 
                 :)
21:41 < jgraham> In the beta/stable testing PR

@ghost
Copy link

ghost commented Sep 3, 2018

Submitting the task to Taskcluster failed. Details

can not read a block mapping entry; a multiline key may not be an implicit key at line 8, column 9:
then:
^

@gsnedders
Copy link
Member Author

@jgraham You said "And you can easily test it on taskcluster if you enable the TC app on a fork and then push the change to enable it there"; I can't figure out what that change to enable it is. Please send help.

@gsnedders
Copy link
Member Author

On TC, the differences between 067aaee and 0f43915 (i.e., moving to chrome_webdriver) are:

/storage/persisted.https.any.worker.html: has subtest changes:
    persisted() returns a promise and resolves as boolean with false: was FAIL, now PASS
/storage/storagemanager-persist.https.window.html: was TIMEOUT, now OK
/css/CSS2/tables/border-collapse-dynamic-row-002.xht: was PASS, now FAIL
/service-workers/cache-storage/common.https.html: was OK, now ERROR
/webstorage/storage_setitem.html: was ERROR, now CRASH
/mediacapture-image/MediaStreamTrack-getConstraints-fast.html: was ERROR, now OK
/paint-timing/first-image-child.html: was TIMEOUT, now OK
/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-003v.html: was FAIL, now PASS
/web-locks/ifAvailable.tentative.https.any.html: has subtest changes:
    Locks are available once previous release is processed: was PASS, now FAIL
/offscreen-canvas/the-offscreen-canvas/offscreencanvas.resize.html: has subtest changes:
    Verify that drawImage uses the size of the frame as the intinsic size of a placeholder canvas.: was FAIL, now PASS
/webrtc/RTCDTMFSender-ontonechange.https.html: has subtest changes:
    Calling insertDTMF() multiple times in the middle of tonechange events should cause future tonechanges to be updated the last provided tones: was FAIL, now PASS
/content-security-policy/connect-src/connect-src-eventsource-blocked.sub.html: has subtest changes:
    Expecting logs: ["Pass","violated-directive=connect-src"]: was PASS, now FAIL
/service-workers/cache-storage/window/sandboxed-iframes.https.html: was OK, now CRASH
/webmessaging/broadcastchannel/basics.html: has subtest changes:
    Closing a channel in onmessage doesn't cancel already queued events: was FAIL, now PASS

@jgraham
Copy link
Contributor

jgraham commented Sep 6, 2018

I'm not very worried by those changes. I would be easilly convinced that all those tests are already flaky.

@gsnedders
Copy link
Member Author

Going through these, the only ones that are disabled in any browser are:

/webstorage/storage_setitem.html
/webrtc/RTCDTMFSender-ontonechange.https.html

@jgraham
Copy link
Contributor

jgraham commented Sep 6, 2018

Bear in mind that tests that are unstable on Blink infra are not using Selenium or indeed Chrome, just running in contentshell. So there are likely to be some differences. We also don't know what the base rate of instability is running with Selenium, so it's impossible to say if this number of unstable tests is within the expectations we currently have.

On your branch, sunning the above tests locally with --verify, I see:

1:50.26 WARNING u'runner_teardown': ()
 1:50.45 INFO ## All results ##

1:50.45 INFO ### /css/CSS2/tables/border-collapse-dynamic-row-002.xht ###
1:50.45 INFO | Subtest | Results | Messages |
1:50.45 INFO |---------|---------|----------|
1:50.45 INFO | | PASS | |
1:50.45 INFO
1:50.45 INFO ### /css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-003v.html ###
1:50.45 INFO | Subtest | Results | Messages |
1:50.45 INFO |---------|---------|----------|
1:50.46 INFO | | PASS | |
1:50.46 INFO
1:50.46 INFO ### /content-security-policy/connect-src/connect-src-eventsource-blocked.sub.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |-------------------------------------------------------------|---------|----------|
1:50.46 INFO | | OK | |
1:50.46 INFO | Expecting logs: ["Pass","violated-directive=connect-src"] | PASS | |
1:50.46 INFO
1:50.46 INFO ### /mediacapture-image/MediaStreamTrack-getConstraints-fast.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |----------------------------------------------------------------|---------|----------|
1:50.46 INFO | | OK | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: whiteBalanceMode | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: exposureMode | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 1 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: focusMode | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 2 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: exposureCompensation | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 3 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: colorTemperature | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 4 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: iso | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 5 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: brightness | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 6 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: contrast | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 7 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: saturation | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 8 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: sharpness | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 9 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), key: zoom | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 10 | PASS | |
1:50.46 INFO | MediaStreamTrack.getConstraints(), complete | PASS | |
1:50.46 INFO | MediaStreamTrack-getConstraints-fast 11 | PASS | |
1:50.46 INFO
1:50.46 INFO ### /offscreen-canvas/the-offscreen-canvas/offscreencanvas.resize.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |-------------------------------------------------------------------------------------------------------------------------------------------------------|---------|----------|
1:50.46 INFO | | OK | |
1:50.46 INFO | Verify that writing to the width and height attributes of an OffscreenCanvas works when there is no context attached. | PASS | |
1:50.46 INFO | Verify that writing to the width and height attributes of an OffscreenCanvas works when there is a 2d context attached. | PASS | |
1:50.46 INFO | Verify that writing to the width and height attributes of an OffscreenCanvas works when there is a webgl context attached. | PASS | |
1:50.46 INFO | Verify that writing to the width or height attribute of a placeholder canvas throws an exception | PASS | |
1:50.46 INFO | Verify that writing to the width or height attribute of a placeholder canvas throws an exception even when not changing the value of the attribute. | PASS | |
1:50.46 INFO | Verify that resizing a 2d context resets its state. | PASS | |
1:50.46 INFO | Verify that setting the size of a 2d context to the same size it already had resets its state. | PASS | |
1:50.46 INFO | Verify that resizing an OffscreenCanvas with a 2d context propagates the new size to its placeholder canvas asynchronously. | PASS | |
1:50.46 INFO | Verify that resizing an OffscreenCanvas with a webgl context propagates the new size to its placeholder canvas asynchronously. | PASS | |
1:50.46 INFO | Verify that drawImage uses the size of the frame as the intinsic size of a placeholder canvas. | PASS | |
1:50.46 INFO
1:50.46 INFO ### /paint-timing/first-image-child.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |-------------------------------------------------------------------------------|---------|----------|
1:50.46 INFO | | OK | |
1:50.46 INFO | Child iframe ignores paint-timing events fired from parent image rendering. | PASS | |
1:50.46 INFO
1:50.46 INFO ### /service-workers/cache-storage/common.https.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |------------------------------------|-------------------------------|----------|
1:50.46 INFO | | ERROR: 3/10, OK: 7/10 | |
1:50.46 INFO | Window sees cache puts by Worker | PASS: 7/10, MISSING: 3/10 | |
1:50.46 INFO
1:50.46 INFO ### /service-workers/cache-storage/window/sandboxed-iframes.https.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |---------------------------------------------------------------|-------------------------------|--------------------------------------------------------------------------------------------------------------------------|
1:50.46 INFO | | ERROR: 1/10, OK: 9/10 | |
1:50.46 INFO | Sandboxed iframe with allow-same-origin is allowed access | PASS: 9/10, MISSING: 1/10 | |
1:50.46 INFO | Sandboxed iframe without allow-same-origin is denied access | FAIL: 9/10, MISSING: 1/10 | assert_equals: Access should be denied if sandbox lacks allow-same-origin expected "denied" but got "unexpecteddenied" |
1:50.46 INFO
1:50.46 INFO ### /storage/persisted.https.any.worker.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |--------------------------------------------------------------------|---------|----------|
1:50.46 INFO | | OK | |
1:50.46 INFO | persisted() method exists and returns a Promise | PASS | |
1:50.46 INFO | persisted() returns a promise and resolves as boolean with false | PASS | |
1:50.46 INFO
1:50.46 INFO ### /storage/storagemanager-persist.https.window.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |----------------------------------------------------------------|---------|----------|
1:50.46 INFO | | OK | |
1:50.46 INFO | navigator.storage.persist() returns a promise that resolves. | PASS | |
1:50.46 INFO
1:50.46 INFO ### /web-locks/ifAvailable.tentative.https.any.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |-----------------------------------------------------------------------|---------|----------|
1:50.46 INFO | | OK | |
1:50.46 INFO | Lock request with ifAvailable - lock available | PASS | |
1:50.46 INFO | Lock request with ifAvailable - lock not available | PASS | |
1:50.46 INFO | Lock request with ifAvailable - lock not available, callback throws | PASS | |
1:50.46 INFO | Lock request with ifAvailable - unrelated lock held | PASS | |
1:50.46 INFO | Shared lock request with ifAvailable - shared lock held | PASS | |
1:50.46 INFO | Exclusive lock request with ifAvailable - shared lock held | PASS | |
1:50.46 INFO | Shared lock request with ifAvailable - exclusive lock held | PASS | |
1:50.46 INFO | Returned Promise rejects if callback throws synchronously | PASS | |
1:50.46 INFO | Returned Promise rejects if async callback yields rejected promise | PASS | |
1:50.46 INFO | Locks are available once previous release is processed | PASS | |
1:50.46 INFO
1:50.46 INFO ### /webmessaging/broadcastchannel/basics.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |-------------------------------------------------------------------------|----------------------------|---------------------------------------------------------|
1:50.46 INFO | | OK | |
1:50.46 INFO | postMessage results in correct event | PASS | |
1:50.46 INFO | messages are delivered in port creation order | PASS | |
1:50.46 INFO | messages aren't delivered to a closed port | PASS | |
1:50.46 INFO | closing and creating channels during message delivery works correctly | PASS | |
1:50.46 INFO | Closing a channel in onmessage doesn't cancel already queued events | FAIL: 1/10, PASS: 9/10 | assert_array_equals: lengths differ, expected 4 got 3 |
1:50.46 INFO
1:50.46 INFO ### /webrtc/RTCDTMFSender-ontonechange.https.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
1:50.46 INFO | | OK | |
1:50.46 INFO | insertDTMF() with default duration and intertoneGap should fire tonechange events at the expected time | PASS | |
1:50.46 INFO | insertDTMF() with explicit duration and intertoneGap should fire tonechange events at the expected time | PASS | |
1:50.46 INFO | insertDTMF('') should not fire any tonechange event, including for '' tone | FAIL | assert_unreached: Expect no tonechange event to be fired Reached unreachable code |
1:50.46 INFO | insertDTMF() with duration less than 40 should be clamped to 40 | PASS | |
1:50.46 INFO | insertDTMF() with interToneGap less than 30 should be clamped to 30 | PASS | |
1:50.46 INFO | insertDTMF with comma should delay next tonechange event for a constant 2000ms | PASS | |
1:50.46 INFO | insertDTMF() with transceiver stopped in the middle should stop future tonechange events from firing | FAIL | assert_unreached: Unexpected promise rejection: Error: assert_equals: Expect there to be only one tranceiver in pc expected 1 but got 0 Reached unreachable code |
1:50.46 INFO | Calling insertDTMF() in the middle of tonechange events should cause future tonechanges to be updated to new tones | PASS | |
1:50.46 INFO | Calling insertDTMF() multiple times in the middle of tonechange events should cause future tonechanges to be updated the last provided tones | FAIL: 1/10, PASS: 9/10 | assert_equals: Expect current event.tone to be 3 expected "3" but got "1" |
1:50.46 INFO | Calling insertDTMF('') in the middle of tonechange events should stop future tonechange events from firing | PASS | |
1:50.46 INFO | Setting transceiver.currentDirection to recvonly in the middle of tonechange events should stop future tonechange events from firing | FAIL | Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'. 'unified-plan' will become the default behavior in the future, but it is currently experimental. To try it out, construct the RTCPeerConnection with sdpSemantics:'unified-plan' present in the RTCConfiguration argument. |
1:50.46 INFO | Tone change event constructor works | PASS | |
1:50.46 INFO | Tone change event with unexpected name should not crash | PASS | |
1:50.46 INFO
1:50.46 INFO ### /webstorage/storage_setitem.html ###
1:50.46 INFO | Subtest | Results | Messages |
1:50.46 INFO |---------|---------|----------|
1:50.46 INFO | | ERROR | |
1:50.46 INFO
1:50.46 INFO ## Unstable results ##

1:50.46 INFO | Test | Subtest | Results | Messages |
1:50.46 INFO |----------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------|--------------------------------------------------------------------------------------------------------------------------|
1:50.46 INFO | /service-workers/cache-storage/common.https.html | | ERROR: 3/10, OK: 7/10 | |
1:50.46 INFO | /service-workers/cache-storage/common.https.html | Window sees cache puts by Worker | PASS: 7/10, MISSING: 3/10 | |
1:50.46 INFO | /service-workers/cache-storage/window/sandboxed-iframes.https.html | | ERROR: 1/10, OK: 9/10 | |
1:50.46 INFO | /service-workers/cache-storage/window/sandboxed-iframes.https.html | Sandboxed iframe with allow-same-origin is allowed access | PASS: 9/10, MISSING: 1/10 | |
1:50.46 INFO | /service-workers/cache-storage/window/sandboxed-iframes.https.html | Sandboxed iframe without allow-same-origin is denied access | FAIL: 9/10, MISSING: 1/10 | assert_equals: Access should be denied if sandbox lacks allow-same-origin expected "denied" but got "unexpecteddenied" |
1:50.46 INFO | /webmessaging/broadcastchannel/basics.html | Closing a channel in onmessage doesn't cancel already queued events | FAIL: 1/10, PASS: 9/10 | assert_array_equals: lengths differ, expected 4 got 3 |
1:50.46 INFO | /webrtc/RTCDTMFSender-ontonechange.https.html | Calling insertDTMF() multiple times in the middle of tonechange events should cause future tonechanges to be updated the last provided tones | FAIL: 1/10, PASS: 9/10 | assert_equals: Expect current event.tone to be 3 expected "3" but got "1" |
1:50.46 INFO
1:50.46 INFO ::: Running tests in a loop 10 times : FAIL
1:50.46 INFO :::
1:50.46 ERROR ::: Test verification FAIL
1:50.46 INFO :::

Which looks like a lot of these tests are just unstable.

@gsnedders
Copy link
Member Author

@jgraham interesting, that's much more than came back as unstable with --verify locally for me! (currently running with way more iterations)

@gsnedders
Copy link
Member Author

@jgraham https://gist.github.com/084ea9f86491b84e22ce9c887694fbb7 is the result of rerunning it with an empty commit… no idea why so much changed (and so much is missing!)

@gsnedders
Copy link
Member Author

Ah, here's what happened:

�[2m�[34m13:26.91�(B�[m �[33mTEST_START�(B�[m: /html/syntax/parsing/html5lib_ruby.html?run_type=write_single
�[2m�[34m14:36.97�(B�[m �[31mTEST_END�(B�[m: TIMEOUT, expected OK
�[2m�[34m14:37.04�(B�[m �[33mWARNING�(B�[m u'runner_teardown': ()
�[2m�[34m14:37.05�(B�[m �[34mINFO�(B�[m STDERR: ['/home/test/web-platform-tests/_venv/bin/chromedriver', '--port=4444', '--url-base=/']
�[2m�[34m14:37.07�(B�[m �[33mWARNING�(B�[m Failure during init Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[31mERROR�(B�[m Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[33mWARNING�(B�[m Failure during init Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[31mERROR�(B�[m Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[34mINFO�(B�[m STDERR: ['/home/test/web-platform-tests/_venv/bin/chromedriver', '--port=4444', '--url-base=/']
�[2m�[34m14:37.07�(B�[m �[33mWARNING�(B�[m Failure during init Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[31mERROR�(B�[m Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[34mINFO�(B�[m STDERR: ['/home/test/web-platform-tests/_venv/bin/chromedriver', '--port=4444', '--url-base=/']
�[2m�[34m14:37.07�(B�[m �[33mWARNING�(B�[m Failure during init Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[31mERROR�(B�[m Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[34mINFO�(B�[m STDERR: ['/home/test/web-platform-tests/_venv/bin/chromedriver', '--port=4444', '--url-base=/']
�[2m�[34m14:37.07�(B�[m �[33mWARNING�(B�[m Failure during init Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[31mERROR�(B�[m Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[34mINFO�(B�[m STDERR: ['/home/test/web-platform-tests/_venv/bin/chromedriver', '--port=4444', '--url-base=/']
�[2m�[34m14:37.07�(B�[m �[33mWARNING�(B�[m Failure during init Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[31mERROR�(B�[m Traceback (most recent call last):
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 195, in init
    self.browser.start(group_metadata=group_metadata, **self.browser_settings)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py", line 83, in start
    self.server.start(block=False)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 49, in start
    self._run(block)
  File "/home/test/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py", line 63, in _run
    self._proc.run()
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 760, in run
    self.proc = self.Process([self.cmd] + self.args, **args)
  File "/home/test/web-platform-tests/_venv/lib/python2.7/site-packages/mozprocess/processhandler.py", line 114, in __init__
    universal_newlines, startupinfo, creationflags)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

�[2m�[34m14:37.07�(B�[m �[31mERROR�(B�[m Max restarts exceeded
�[2m�[34m14:37.08�(B�[m �[34mINFO�(B�[m Got 388 unexpected results
�[2m�[34m14:37.08�(B�[m �[33mSUITE_END�(B�[m

@gsnedders
Copy link
Member Author

Although this passed CI, TC has lots of:

INFO:manifest:Manifest downloaded
Traceback (most recent call last):
  File "./wpt", line 5, in <module>
    wpt.main()
  File "/home/test/web-platform-tests/tools/wpt/wpt.py", line 132, in main
    rv = script(*args, **kwargs)
  File "/home/test/web-platform-tests/tools/wpt/run.py", line 490, in run
    **kwargs)
  File "/home/test/web-platform-tests/tools/wpt/run.py", line 459, in setup_wptrunner
    channel = install.get_channel(kwargs["product"], kwargs["channel"])
  File "/home/test/web-platform-tests/tools/wpt/install.py", line 49, in get_channel
    channel = channel[browser]
KeyError: 'chrome_webdriver'
[taskcluster 2018-09-06 16:30:36.701Z] === Task Finished ===
[taskcluster 2018-09-06 16:30:38.432Z] Successful task run with exit code: 0 completed in 88.828 seconds

Filed #12876 for that.

Annoying that whatever caused this is isn't caught by our current CI.

@gsnedders
Copy link
Member Author

@jgraham so what do you want to do here? do you want to just land this? do you want to land this with it enabled by default for Chrome (given you believe all the above to be flakiness)?

@foolip
Copy link
Member

foolip commented Sep 6, 2018

do you want to just land this? do you want to land this with it enabled by default for Chrome (given you believe all the above to be flakiness)?

I think a reasonable approach would be:

  • land this
  • wait for it to have reached wpt.fyi results
  • land a small PR that enables it by default on Chrome
  • wait for wpt.fyi. compare the differences to before, and revert if they are alarming

@jgraham
Copy link
Contributor

jgraham commented Sep 7, 2018

I think that what @foolip proposes is reasonable. I think it's hard to understand how any of the observed changes would be caused by changing the python library sending WebDriver commands; it would be different if we were seeing lots of failures in testdriver or similar.

Once we enable this by default please remove the old implementation.

@gsnedders
Copy link
Member Author

@jgraham of the products/browsers, I presume? Selenium will still be used by Sauce.

@gsnedders
Copy link
Member Author

FWIW, I got the following as unstable:

139:49.08 INFO ## Unstable results ##

139:49.08 INFO |                                       Test                                      |                                                             Subtest                                                              |               Results               |                      Messages                     |
139:49.08 INFO |---------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|---------------------------------------------------|
139:49.08 INFO | `/content-security-policy/connect-src/connect-src-eventsource-blocked.sub.html` | `Expecting logs: ["Pass","violated-directive=connect-src"]`                                                                      | **FAIL: 158/1000, PASS: 842/1000**  | `assert_unreached: Fail Reached unreachable code` |
139:49.08 INFO | `/offscreen-canvas/the-offscreen-canvas/offscreencanvas.resize.html`            | `Verify that resizing an OffscreenCanvas with a 2d context propagates the new size to its placeholder canvas asynchronously.`    | **FAIL: 1/1000, PASS: 999/1000**    | `assert_equals: expected 30 but got 10`           |
139:49.08 INFO | `/offscreen-canvas/the-offscreen-canvas/offscreencanvas.resize.html`            | `Verify that resizing an OffscreenCanvas with a webgl context propagates the new size to its placeholder canvas asynchronously.` | **FAIL: 8/1000, PASS: 992/1000**    | `assert_equals: expected 30 but got 10`           |
139:49.08 INFO | `/offscreen-canvas/the-offscreen-canvas/offscreencanvas.resize.html`            | `Verify that drawImage uses the size of the frame as the intinsic size of a placeholder canvas.`                                 | **FAIL: 18/1000, PASS: 982/1000**   | `assert_equals: expected 10 but got 1`            |
139:49.08 INFO | `/service-workers/cache-storage/common.https.html`                              |                                                                                                                                  | **CRASH: 2/1000, OK: 998/1000**     |                                                   |
139:49.08 INFO | `/service-workers/cache-storage/common.https.html`                              | `Window sees cache puts by Worker`                                                                                               | **PASS: 998/1000, MISSING: 2/1000** |                                                   |
139:49.08 INFO 
139:49.08 INFO ::: Running tests in a loop 1000 times : FAIL

kereliuk and others added 3 commits September 7, 2018 17:28
This adds edge_webdriver, chrome_webdriver, and safari_webdriver as products.

Co-authored-by: Geoffrey Sneddon <me@gsnedders.com>
@gsnedders gsnedders merged commit 59bed35 into web-platform-tests:master Sep 7, 2018
@gsnedders gsnedders deleted the exec-webdriver branch September 7, 2018 17:02
@jgraham
Copy link
Contributor

jgraham commented Sep 7, 2018

@jgraham of the products/browsers, I presume? Selenium will still be used by Sauce.

Yes, I mean don't maintain two implementations for specific browsers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci infra webdriver wg-testing_browser wpt wptrunner The automated test runner, commonly called through ./wpt run
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants