Skip to content

Instantly share code, notes, and snippets.

@jwhitlock
Created October 6, 2017 13:44
Show Gist options
  • Select an option

  • Save jwhitlock/e7bc2f78ce6dfee10d1edeae568ebb0c to your computer and use it in GitHub Desktop.

Select an option

Save jwhitlock/e7bc2f78ce6dfee10d1edeae568ebb0c to your computer and use it in GitHub Desktop.
PR 4915 - Log from "BROWSERS=firefox SELENIUM_LOGS=1 scripts/run_selenium_hub.sh"
#!/bin/bash -vx
PYTEST_ARGS="${@}"
+ PYTEST_ARGS=
if [ -z "$PYTEST_ARGS" ]; then
PYTEST_ARGS="tests/functional -m \"not login\" -vv -sx"
fi
+ '[' -z '' ']'
+ PYTEST_ARGS='tests/functional -m "not login" -vv -sx'
echo "ARGS=$PYTEST_ARGS"
+ echo 'ARGS=tests/functional -m "not login" -vv -sx'
ARGS=tests/functional -m "not login" -vv -sx
BASE_URL=${BASE_URL:-https://developer.allizom.org}
+ BASE_URL=https://developer.allizom.org
NAME_SUFFIX=${NAME_SUFFIX:-kuma}
+ NAME_SUFFIX=kuma
SELENIUM_TAG=${SELENIUM_TAG:-3.6.0}
+ SELENIUM_TAG=3.6.0
BROWSERS=${BROWSERS:-chrome firefox}
+ BROWSERS=firefox
SELENIUM_LOGS=${SELENIUM_LOGS:-0}
+ SELENIUM_LOGS=1
find . \( -name \*.pyc -o -name \*.pyo -o -name __pycache__ \) -prune -exec rm -rf {} +
+ find . '(' -name '*.pyc' -o -name '*.pyo' -o -name __pycache__ ')' -prune -exec rm -rf '{}' +
(
set -e
docker build -t kuma-integration-tests:latest --pull=true -f docker/images/integration-tests/Dockerfile .
docker run -d --name "selenium-hub-${NAME_SUFFIX}" "selenium/hub:${SELENIUM_TAG}"
IFS=" "
for browser in ${BROWSERS}; do
docker run -d --name "selenium-node-${browser}-${NAME_SUFFIX}" --link selenium-hub-kuma:hub "selenium/node-${browser}:${SELENIUM_TAG}"
done
for browser in ${BROWSERS}; do
cmd="pytest --driver Remote --capability browserName ${browser} --host hub --base-url=${BASE_URL} ${PYTEST_ARGS}"
docker run --link "selenium-hub-${NAME_SUFFIX}:hub" kuma-integration-tests:latest sh -c "$cmd"
done
)
+ set -e
+ docker build -t kuma-integration-tests:latest --pull=true -f docker/images/integration-tests/Dockerfile .
Sending build context to Docker daemon 81.5MB
Step 1/12 : FROM quay.io/mozmar/base
latest: Pulling from mozmar/base
b3e1c725a85f: Already exists
4daad8bdde31: Already exists
63fe8c0068a8: Already exists
4a70713c436f: Already exists
bd842a2105a8: Already exists
a24943c3fc98: Already exists
Digest: sha256:39ce59816701a725b695f95afe16fc7233818f534e9e74a1b4b1791540167dee
Status: Image is up to date for quay.io/mozmar/base:latest
---> 000df8c6185c
Step 2/12 : WORKDIR /app
---> Using cache
---> ccc27ba94601
Step 3/12 : RUN apt-get update && apt-get install -y --no-install-recommends build-essential python python-dev python-pip python-setuptools libxml2-dev libxslt1.1 libxslt1-dev zlib1g-dev
---> Using cache
---> 037a8597bf68
Step 4/12 : ENV PYTEST_PROCESSES 5
---> Using cache
---> b80b9441e855
Step 5/12 : ENV PRIVACY "public restricted"
---> Using cache
---> 3e1db17bf25a
Step 6/12 : ENV TESTS_PATH /app/tests
---> Using cache
---> e75c9ac8bdf2
Step 7/12 : ENV RESULTS_PATH /app/results
---> Using cache
---> 1484707313cc
Step 8/12 : ENV PYTHONDONTWRITEBYTECODE 1
---> Using cache
---> 5db742cb6b64
Step 9/12 : ENV PIP_DISABLE_PIP_VERSION_CHECK 1
---> Using cache
---> 62a807649e44
Step 10/12 : COPY ./requirements /app/requirements
---> Using cache
---> ad0c5b4b9e7e
Step 11/12 : RUN pip install --no-cache-dir -r requirements/test.txt
---> Using cache
---> c529f415d651
Step 12/12 : COPY tests /app/tests
---> Using cache
---> 103929df8a80
Successfully built 103929df8a80
Successfully tagged kuma-integration-tests:latest
+ docker run -d --name selenium-hub-kuma selenium/hub:3.6.0
ae6d951c12773ccbf3475895d704ffebe614284e1ce5072d554376502aed17f0
+ IFS=' '
+ for browser in '${BROWSERS}'
+ docker run -d --name selenium-node-firefox-kuma --link selenium-hub-kuma:hub selenium/node-firefox:3.6.0
b880454af06d3b9a02cb3216b23473730e4fe70476d39579f9868fa2852ea86b
+ for browser in '${BROWSERS}'
+ cmd='pytest --driver Remote --capability browserName firefox --host hub --base-url=https://developer.allizom.org tests/functional -m "not login" -vv -sx'
+ docker run --link selenium-hub-kuma:hub kuma-integration-tests:latest sh -c 'pytest --driver Remote --capability browserName firefox --host hub --base-url=https://developer.allizom.org tests/functional -m "not login" -vv -sx'
============================= test session starts ==============================
platform linux2 -- Python 2.7.12, pytest-3.0.7, py-1.4.33, pluggy-0.4.0 -- /usr/bin/python
cachedir: .cache
baseurl: https://developer.allizom.org
metadata: {'Python': '2.7.12', 'Driver': 'Remote', 'Capabilities': {'browserName': 'firefox'}, 'Server': 'hub:4444', 'Base URL': 'https://developer.allizom.org', 'Platform': 'Linux-4.9.49-moby-x86_64-with-Ubuntu-16.04-xenial', 'Plugins': {'variables': '1.7.0', 'selenium': '1.11.1', 'xdist': '1.16.0', 'rerunfailures': '2.1.0', 'html': '1.16.0', 'base-url': '1.4.1', 'metadata': '1.5.0'}, 'Packages': {'py': '1.4.33', 'pytest': '3.0.7', 'pluggy': '0.4.0'}}
driver: Remote
sensitiveurl: .* *** WARNING: sensitive url matches https://developer.allizom.org ***
rootdir: /app, inifile:
plugins: xdist-1.16.0, variables-1.7.0, base-url-1.4.1, metadata-1.5.0, rerunfailures-2.1.0, selenium-1.11.1, html-1.16.0
collecting ... collected 120 items
tests/functional/test_article.py::test_title ERROR
==================================== ERRORS ====================================
_________________________ ERROR at setup of test_title _________________________
request = <SubRequest 'driver' for <Function 'test_title'>>
driver_class = <class 'selenium.webdriver.remote.webdriver.WebDriver'>
driver_kwargs = {'browser_profile': None, 'command_executor': 'http://hub:4444/wd/hub', 'desired_capabilities': {'browserName': 'firefox', 'platform': 'ANY', 'version': ''}}
@pytest.yield_fixture
def driver(request, driver_class, driver_kwargs):
"""Returns a WebDriver instance based on options and capabilities"""
> driver = driver_class(**driver_kwargs)
/usr/local/lib/python2.7/dist-packages/pytest_selenium/pytest_selenium.py:114:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py:151: in __init__
self.start_session(desired_capabilities, browser_profile)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py:240: in start_session
response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py:308: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7fa9d3275750>
response = {'status': 500, 'value': '{"value":{"stacktrace":"org.openqa.selenium.SessionNotCreatedException: Unable to find a mat...t\n at /checkout/src/libstd/sys/unix/thread.rs:84","error":"session not created"},"status":33}'}
def check_response(self, response):
"""
Checks that a JSON response from the WebDriver does not have an error.
:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.
:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if status is None or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, basestring):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if status is None:
status = value["status"]
message = value["value"]
if not isinstance(message, basestring):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass
exception_class = ErrorInResponseException
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = WebDriverException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = WebDriverException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
else:
exception_class = WebDriverException
if value == '' or value is None:
value = response['value']
if isinstance(value, basestring):
if exception_class == ErrorInResponseException:
raise exception_class(response, value)
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']
screen = None
if 'screen' in value:
screen = value['screen']
stacktrace = None
if 'stackTrace' in value and value['stackTrace']:
stacktrace = []
try:
for frame in value['stackTrace']:
line = self._value_or_default(frame, 'lineNumber', '')
file = self._value_or_default(frame, 'fileName', '<anonymous>')
if line:
file = "%s:%s" % (file, line)
meth = self._value_or_default(frame, 'methodName', '<anonymous>')
if 'className' in frame:
meth = "%s.%s" % (frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == ErrorInResponseException:
raise exception_class(response, message)
elif exception_class == UnexpectedAlertPresentException and 'alert' in value:
raise exception_class(message, screen, stacktrace, value['alert'].get('text'))
> raise exception_class(message, screen, stacktrace)
E WebDriverException: Message: Unable to find a matching set of capabilities
E Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T16:15:40.131Z'
E System info: host: 'b880454af06d', ip: '172.17.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.49-moby', java.version: '1.8.0_131'
E Driver info: driver.version: unknown
E remote stacktrace: stack backtrace:
E 0: 0x4f388c - backtrace::backtrace::trace::h736111741fa0878e
E 1: 0x4f38c2 - backtrace::capture::Backtrace::new::h63b8a5c0787510c9
E 2: 0x442c61 - webdriver::error::WebDriverError::new::hc4fe6a1ced4e57dd
E 3: 0x443dc6 - geckodriver::marionette::MarionetteHandler::create_connection::hf8b6061dba65cdd0
E 4: 0x42ac91 - <webdriver::server::Dispatcher<T, U>>::run::hba9181b5aacf8f04
E 5: 0x402c59 - std::sys_common::backtrace::__rust_begin_short_backtrace::h19de262639927233
E 6: 0x40c065 - std::panicking::try::do_call::h6c1659fc4d01af51
E 7: 0x5e38ec - panic_unwind::__rust_maybe_catch_panic
E at /checkout/src/libpanic_unwind/lib.rs:98
E 8: 0x420d32 - <F as alloc::boxed::FnBox<A>>::call_box::h953e5f59694972c5
E 9: 0x5dc00b - alloc::boxed::{{impl}}::call_once<(),()>
E at /checkout/src/liballoc/boxed.rs:661
E - std::sys_common::thread::start_thread
E at /checkout/src/libstd/sys_common/thread.rs:21
E - std::sys::imp::thread::{{impl}}::new::thread_start
E at /checkout/src/libstd/sys/unix/thread.rs:84
E Stacktrace:
E at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (NativeConstructorAccessorImpl.java:-2)
E at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
E at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
E at java.lang.reflect.Constructor.newInstance (Constructor.java:423)
E at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0 (W3CHandshakeResponse.java:57)
E at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2 (W3CHandshakeResponse.java:104)
E at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$24 (ProtocolHandshake.java:359)
E at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:193)
E at java.util.Spliterators$ArraySpliterator.tryAdvance (Spliterators.java:958)
E at java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.java:126)
E at java.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:498)
E at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:485)
E at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:471)
E at java.util.stream.FindOps$FindOp.evaluateSequential (FindOps.java:152)
E at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
E at java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java:464)
E at org.openqa.selenium.remote.ProtocolHandshake.createSession (ProtocolHandshake.java:362)
E at org.openqa.selenium.remote.server.ServicedSession$Factory.apply (ServicedSession.java:185)
E at org.openqa.selenium.remote.server.ActiveSessionFactory.lambda$createSession$16 (ActiveSessionFactory.java:171)
E at java.util.Optional.map (Optional.java:215)
E at org.openqa.selenium.remote.server.ActiveSessionFactory.createSession (ActiveSessionFactory.java:171)
E at org.openqa.selenium.remote.server.commandhandler.BeginSession.execute (BeginSession.java:72)
E at org.openqa.selenium.remote.server.WebDriverServlet.lambda$handle$0 (WebDriverServlet.java:232)
E at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
E at java.util.concurrent.FutureTask.run (FutureTask.java:266)
E at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
E at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)
E at java.lang.Thread.run (Thread.java:748)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py:194: WebDriverException
!!!!!!!!!!!!!!!!!!!! Interrupted: stopping after 1 failures !!!!!!!!!!!!!!!!!!!!
============================== 7 tests deselected ==============================
==================== 7 deselected, 1 error in 0.87 seconds =====================
if [[ "$SELENIUM_LOGS" != "0" ]]; then
docker logs "selenium-hub-${NAME_SUFFIX}"
for browser in ${BROWSERS}; do
docker logs "selenium-node-${browser}-${NAME_SUFFIX}"
done
fi
+ [[ 1 != \0 ]]
+ docker logs selenium-hub-kuma
starting selenium hub with configuration:
{
"host": null,
"port": 4444,
"role": "hub",
"maxSession": 5,
"newSessionWaitTimeout": -1,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"jettyMaxThreads": -1,
"cleanUpCycle": 5000,
"browserTimeout": 0,
"timeout": 30,
"debug": false
}
13:44:07.900 INFO - Selenium build info: version: '3.6.0', revision: '6fbf3ec767'
13:44:07.901 INFO - Launching Selenium Grid hub
2017-10-06 13:44:08.458:INFO::main: Logging initialized @930ms to org.seleniumhq.jetty9.util.log.StdErrLog
13:44:08.476 INFO - Will listen on 4444
2017-10-06 13:44:08.533:INFO:osjs.Server:main: jetty-9.4.5.v20170502
2017-10-06 13:44:08.573:INFO:osjs.session:main: DefaultSessionIdManager workerName=node0
2017-10-06 13:44:08.573:INFO:osjs.session:main: No SessionScavenger set, using defaults
2017-10-06 13:44:08.576:INFO:osjs.session:main: Scavenging every 660000ms
2017-10-06 13:44:08.586:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@525f1e4e{/,null,AVAILABLE}
2017-10-06 13:44:08.604:INFO:osjs.AbstractConnector:main: Started ServerConnector@12d3a4e9{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}
2017-10-06 13:44:08.604:INFO:osjs.Server:main: Started @1076ms
13:44:08.604 INFO - Nodes should register to http://172.17.0.2:4444/grid/register/
13:44:08.604 INFO - Selenium Grid hub is up and running
13:44:09.709 INFO - Registered a node http://172.17.0.3:5555
13:44:10.033 INFO - Mismatched capabilities. Creating a synthetic w3c capability.
13:44:10.045 INFO - Got a request to create a new session: Capabilities [{browserName=firefox, platformName=ANY, version=, platform=ANY}]
13:44:10.046 INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, browserName=firefox, maxInstances=1, version=56.0, applicationName=, platform=LINUX}
+ for browser in '${BROWSERS}'
+ docker logs selenium-node-firefox-kuma
13:44:09.044 INFO - Selenium build info: version: '3.6.0', revision: '6fbf3ec767'
13:44:09.045 INFO - Launching a Selenium Grid node
2017-10-06 13:44:09.463:INFO::main: Logging initialized @874ms to org.seleniumhq.jetty9.util.log.StdErrLog
13:44:09.513 INFO - Driver class not found: com.opera.core.systems.OperaDriver
13:44:09.537 INFO - Driver provider class org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
registration capabilities Capabilities [{ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS}] does not match the current platform LINUX
13:44:09.538 INFO - Driver provider class org.openqa.selenium.edge.EdgeDriver registration is skipped:
registration capabilities Capabilities [{browserName=MicrosoftEdge, version=, platform=WINDOWS}] does not match the current platform LINUX
13:44:09.538 INFO - Driver provider class org.openqa.selenium.safari.SafariDriver registration is skipped:
registration capabilities Capabilities [{browserName=safari, version=, platform=MAC}] does not match the current platform LINUX
13:44:09.564 INFO - Using the passthrough mode handler
2017-10-06 13:44:09.590:INFO:osjs.Server:main: jetty-9.4.5.v20170502
2017-10-06 13:44:09.624:WARN:osjs.SecurityHandler:main: ServletContext@o.s.j.s.ServletContextHandler@6302bbb1{/,null,STARTING} has uncovered http methods for path: /
2017-10-06 13:44:09.628:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@6302bbb1{/,null,AVAILABLE}
2017-10-06 13:44:09.645:INFO:osjs.AbstractConnector:main: Started ServerConnector@5b7a5baa{HTTP/1.1,[http/1.1]}{0.0.0.0:5555}
2017-10-06 13:44:09.645:INFO:osjs.Server:main: Started @1056ms
13:44:09.645 INFO - Selenium Grid node is up and ready to register to the hub
13:44:09.652 INFO - Starting auto registration thread. Will try to register every 5000 ms.
13:44:09.653 INFO - Registering the node to the hub: http://172.17.0.2:4444/grid/register
13:44:09.712 INFO - The node is registered to the hub and ready to use
2017-10-06 13:44:10.225:INFO:osjshC.ROOT:qtp1564984895-10: org.openqa.selenium.remote.server.WebDriverServlet-1afd44cb: Initialising WebDriverServlet
13:44:10.269 INFO - Binding default provider to: org.openqa.selenium.chrome.ChromeDriverService
13:44:10.269 INFO - Found handler: org.openqa.selenium.remote.server.commandhandler.BeginSession@50faa5a2
13:44:10.274 INFO - /session: Executing POST on /session (handler: BeginSession)
13:44:10.313 INFO - Mismatched capabilities. Creating a synthetic w3c capability.
13:44:10.318 INFO - Capabilities are: Capabilities {browserName=firefox, platformName=ANY, version=, platform=ANY, }
13:44:10.319 INFO - Capabilities {browserName=firefox, platformName=ANY, version=, platform=ANY, } matched class org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.firefox.GeckoDriverService)
13:44:10.319 INFO - Capabilities {browserName=firefox, platformName=ANY, version=, platform=ANY, } matched class org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
1507297450351 geckodriver INFO geckodriver 0.19.0
1507297450354 geckodriver INFO Listening on 127.0.0.1:23150
for browser in ${BROWSERS}; do
docker stop "selenium-node-${browser}-${NAME_SUFFIX}"
docker rm --volumes "selenium-node-${browser}-${NAME_SUFFIX}"
done
+ for browser in '${BROWSERS}'
+ docker stop selenium-node-firefox-kuma
selenium-node-firefox-kuma
+ docker rm --volumes selenium-node-firefox-kuma
selenium-node-firefox-kuma
docker stop "selenium-hub-${NAME_SUFFIX}"
+ docker stop selenium-hub-kuma
selenium-hub-kuma
docker rm --volumes "selenium-hub-${NAME_SUFFIX}"
+ docker rm --volumes selenium-hub-kuma
selenium-hub-kuma
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment