I\'m trying to run integration tests on a local host (with no HTTPS) using selenium with ChromeDriver.
Chrome requires an https certificate, but from this question i
This error message...
This site can’t provide a secure connection app sent an invalid response. ERR_SSL_PROTOCOL_ERROR
...implies that the ChromeDriver was unable to initiate/spawn a new WebBrowser i.e. Chrome Browser session on your localhost.
As you are seeing this issue on your local host (with no HTTPS) as per this comment a blind fold solution would be to add the argument
--allow-insecure-localhost
through chromeOptions()
as follows:
'goog:chromeOptions': {'args': ['--allow-insecure-localhost'],
'extensions': []}
However your main issue seems to be with the capabilities where you have set platform
being set s ANY
as follows:
{'acceptInsecureCerts': True,
'browserName': 'chrome',
'goog:chromeOptions': {'args': ['--ignore-certificate-errors'],
'extensions': []},
'platform': 'ANY',
'version': ''}
As per WebDriver - W3C Living Document the platformName section mentions, the following platform names are in common usage with well-understood semantics and, when matching capabilities, greatest interoperability can be achieved by honoring them as valid synonyms for well-known Operating Systems:
Key System
--- ------
"linux" Any server or desktop system based upon the Linux kernel.
"mac" Any version of Apple’s macOS.
"windows" Any version of Microsoft Windows, including desktop and mobile versions.
Note:This list is not exhaustive.
When returning capabilities from New Session, it is valid to return a more specific platformName, allowing users to correctly identify the Operating System the WebDriver implementation is running on.
So instead of passing "platform":"ANY"
within the desiredCapabilities object, a more specific "platform":"linux"
will be more desirable approach.
You can find a relevant and related discussion in Curl error thrown for http POST to /session with params: {“desiredCapabilities”:{“browserName”:“chrome”,“platform”:“ANY” with Selenium and PHPUnit
Some more information about the ChromeDriver, Chrome and Selenium Client vrsion would have helped us to analyze the issue in a better way. However as per ChromeDriver history the following issues related to handling of certificate errors were addressed in the last few releases of ChromeDriver:
--ignore-certificate-errors
) were silently ignored and can only be set via devtools. So it was necessary to override and handle certificateError
events on the browser-target DevTools client. A fix was released implementing the usage of the new DevTools method to override certificate error handling browser-wide which allowed ignoring certificate errors in headless mode too. Security.enable
/ Security.setOverrideCertificateErrors
commands quickly enough before a navigation is attempted. A fix was published with a simpler "ignore all cert errors" mode instead deprecated the old override command in favor of a new setIgnoreCertificateErrors
command which also exposes the Security domain on the browser target to facilitate applying this override globally for the whole browser.--allow-insecure-localhost
acceptInsecureCerts
--ignore-certificate-errors
'chromedriverVersion': '74.0.3729.6'
ensure that you are also using 'chrome': '74.0'
(as per ChromeDriver v74.0.3729.6 Release Notes)