chore(deps): update all dependencies #806
test-report-Object__firefox_test_splunk_ta_example_addon_proxy ❌
❌ test-results/test.xml
15 tests were completed in 555s with 0 passed, 15 failed and 0 skipped.
Test suite | Passed | Failed | Skipped | Time |
---|---|---|---|---|
pytest | 15❌ | 555s |
❌ pytest
tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy
❌ test_proxy_fields_label_entity
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_fields_label_entity>>
❌ test_proxy_fields_placeholder_value
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_fields_placeholder_value>>
❌ test_proxy_default_configs
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_default_configs>>
❌ test_proxy_required_field_host
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_host>>
❌ test_proxy_host_valid_input
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_host_valid_input>>
❌ test_proxy_host_field_length_validation
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_host_field_length_validation>>
❌ test_proxy_required_field_port
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_port>>
❌ test_proxy_port_field_valid_range
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_port_field_valid_range>>
❌ test_proxy_port_field_out_of_range
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_port_field_out_of_range>>
❌ test_proxy_list_proxy_types
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_list_proxy_types>>
❌ test_proxy_required_field_proxy_type
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_proxy_type>>
❌ test_proxy_username_field_length_validation
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_username_field_length_validation>>
❌ test_proxy_encrypted_field_password
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_encrypted_field_password>>
❌ test_proxy_frontend_validation
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_frontend_validation>>
❌ test_proxy_backend_validation
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_backend_validation>>
Annotations
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_fields_label_entity
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_fields_label_entity>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_fields_label_entity>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_fields_label_entity>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_fields_label_entity>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315e75d80>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_fields_label_entity'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315e75d80>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_fields_label_entity'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315e75f00>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "990ee512c3a546f59fb55654346e4621", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/990ee512c3a546f59fb55654346e4621"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/990ee512c3a546f59fb55654346e4621
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_fields_placeholder_value
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_fields_placeholder_value>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_fields_placeholder_value>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_fields_placeholder_value>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_fields_placeholder_value>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1316035690>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_fields_placeholder_value'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1316035690>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_fields_placeholder_value'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1316036d70>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "d33a7b703c974b3fa9faa761b2b23fca", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/d33a7b703c974b3fa9faa761b2b23fca"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/d33a7b703c974b3fa9faa761b2b23fca
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_default_configs
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_default_configs>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_default_configs>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_default_configs>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_default_configs>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f131603fc70>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_default_configs'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f131603fc70>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_default_configs'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f131603d9f0>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "ba11fdceb9834b36aeed80b18a5b6ac1", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/ba11fdceb9834b36aeed80b18a5b6ac1"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/ba11fdceb9834b36aeed80b18a5b6ac1
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_required_field_host
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_host>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_host>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_required_field_host>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_required_field_host>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315e43a90>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_required_field_host'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315e43a90>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_required_field_host'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315e41960>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "5e4706336abf41159a4e44a31a932d4d", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/5e4706336abf41159a4e44a31a932d4d"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/5e4706336abf41159a4e44a31a932d4d
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_host_valid_input
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_host_valid_input>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_host_valid_input>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_host_valid_input>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_host_valid_input>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315e41630>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_host_valid_input'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315e41630>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_host_valid_input'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315e41ba0>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "62a02811cd0343209df77d3795162783", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/62a02811cd0343209df77d3795162783"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/62a02811cd0343209df77d3795162783
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_host_field_length_validation
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_host_field_length_validation>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_host_field_length_validation>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_host_field_length_validation>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_host_field_length_validation>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1316036da0>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_host_field_length_validation'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1316036da0>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_host_field_length_validation'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1316034be0>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "bffc15dd7f214290b5cec9f76e10f3ff", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/bffc15dd7f214290b5cec9f76e10f3ff"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/bffc15dd7f214290b5cec9f76e10f3ff
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_required_field_port
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_port>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_port>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_required_field_port>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_required_field_port>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315cbf0a0>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_required_field_port'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315cbf0a0>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_required_field_port'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315cbe200>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "4a064b3dfa4b42908b425153bad8f0d2", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/4a064b3dfa4b42908b425153bad8f0d2"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/4a064b3dfa4b42908b425153bad8f0d2
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_port_field_valid_range
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_port_field_valid_range>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_port_field_valid_range>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_port_field_valid_range>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_port_field_valid_range>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315d09330>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_port_field_valid_range'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315d09330>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_port_field_valid_range'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315d082b0>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "52bb6098a31a49be9064837a96cd2afd", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/52bb6098a31a49be9064837a96cd2afd"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/52bb6098a31a49be9064837a96cd2afd
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_port_field_out_of_range
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_port_field_out_of_range>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_port_field_out_of_range>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_port_field_out_of_range>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_port_field_out_of_range>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315cba1a0>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_port_field_out_of_range'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315cba1a0>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_port_field_out_of_range'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315cb9f60>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "dea22745035b4022b5c0fcd9becf5254", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/dea22745035b4022b5c0fcd9becf5254"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/dea22745035b4022b5c0fcd9becf5254
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_list_proxy_types
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_list_proxy_types>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_list_proxy_types>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_list_proxy_types>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_list_proxy_types>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315cb4b20>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_list_proxy_types'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315cb4b20>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_list_proxy_types'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315cb6e90>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "d82ea95ddb524a06a7113b1fee735549", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/d82ea95ddb524a06a7113b1fee735549"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/d82ea95ddb524a06a7113b1fee735549
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
Check failure on line 0 in test-results/test.xml
github-actions / test-report-Object__firefox_test_splunk_ta_example_addon_proxy
pytest ► tests.ui.test_splunk_ta_example_addon_proxy.firefox_TestProxy ► test_proxy_required_field_proxy_type
Failed test found in:
test-results/test.xml
Error:
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_proxy_type>>
Raw output
request = <SubRequest 'ucc_smartx_selenium_wrapper' for <Function test_proxy_required_field_proxy_type>>
@pytest.fixture(scope="function", autouse=True)
def ucc_smartx_selenium_wrapper(request):
"""
Calls ucc_smartx_selenium_helper fixture
"""
if "ucc_smartx_selenium_helper" in request.fixturenames:
> request.node.selenium_helper = request.getfixturevalue(
"ucc_smartx_selenium_helper"
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_required_field_proxy_type>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
break
except Exception as e:
last_exc = e
LOGGER.warn(
"Failed to configure the browser or login to Splunk instance for - Try={} \nTRACEBACK::{}".format(
try_number, traceback.format_exc()
)
)
else:
LOGGER.error(
"Could not connect to Browser or login to Splunk instance. Please check the logs for detailed error of each retry"
)
> raise (last_exc)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
request = <SubRequest 'ucc_smartx_selenium_helper' for <Function test_proxy_required_field_proxy_type>>
ucc_smartx_configs = SmartConfigs(driver='firefox', driver_version='latest', local_run=False, retry_count=3, headless_run=False)
splunk = {'forwarder_host': 'splunk', 'host': 'splunk', 'password': 'Chang3d!', 'port': '8089', ...}
splunk_web_uri = 'http://splunk:8000/'
splunk_rest_uri = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
@pytest.fixture(scope=get_browser_scope)
def ucc_smartx_selenium_helper(
request, ucc_smartx_configs, splunk, splunk_web_uri, splunk_rest_uri
):
# Try to configure selenium & Login to splunk instance
test_case = "{}_{}".format(
ucc_smartx_configs.driver, request.node.nodeid.split("::")[-1]
)
for try_number in range(ucc_smartx_configs.retry_count):
last_exc = Exception()
try:
> selenium_helper = SeleniumHelper(
ucc_smartx_configs.driver,
ucc_smartx_configs.driver_version,
splunk_web_uri,
splunk_rest_uri,
debug=ucc_smartx_configs.local_run,
cred=(splunk["username"], splunk["password"]),
headless=ucc_smartx_configs.headless_run,
test_case=test_case,
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/plugin.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315f17070>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_required_field_proxy_type'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
elif browser == "chrome":
if debug:
self.browser = webdriver.Chrome(
chrome_options=self.get_local_chrome_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_chrome_opts(
browser_version
),
)
# selenium local stack
elif browser == "chrome_grid":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://chrome-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_grid":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://firefox-grid:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
# kubernetes selenium
elif browser == "chrome_k8s":
google_cert_opts = {
"goog:chromeOptions": {
"w3c": True,
"args": ["ignore-certificate-errors", "ignore-ssl-errors=yes"],
}
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts("chrome", google_cert_opts),
)
elif browser == "firefox_k8s":
firefox_cert_opts = {
"acceptInsecureCerts": True,
"acceptSslCerts": True,
}
self.browser = webdriver.Remote(
command_executor="http://selenium-hub.selenium.svc.cluster.local:4444/wd/hub",
desired_capabilities=self.get_grid_opts(
"firefox", firefox_cert_opts
),
)
elif browser == "edge":
if debug:
self.browser = Edge(
executable_path="msedgedriver",
desired_capabilities=self.get_local_edge_opts(headless),
service_args=["--verbose", "--log-path=selenium.log"],
)
else:
command_executor = EdgeRemoteConnection(
"https://ondemand.saucelabs.com:443/wd/hub"
)
options = EdgeOptions()
options.use_chromium = True
self.browser = webdriver.Remote(
command_executor=command_executor,
options=options,
desired_capabilities=self.get_sauce_edge_opts(browser_version),
)
elif browser == "IE":
if debug:
self.browser = webdriver.Ie(capabilities=self.get_local_ie_opts())
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_ie_opts(browser_version),
)
elif browser == "safari":
if debug:
self.browser = webdriver.Safari()
else:
self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_safari_opts(
browser_version
),
)
else:
raise Exception(
"No valid browser found.! expected=[firefox, chrome, safari], got={}".format(
browser
)
)
except Exception as e:
> raise e
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:203:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_splunk_addon_ui_smartx.base_test.SeleniumHelper object at 0x7f1315f17070>
browser = 'firefox', browser_version = 'latest'
splunk_web_url = 'http://splunk:8000/'
splunk_mgmt_url = (<requests.sessions.Session object at 0x7f131609ba00>, 'https://splunk:8089/')
debug = False, cred = ('admin', 'Chang3d!'), headless = False
test_case = 'firefox_test_proxy_required_field_proxy_type'
def __init__(
self,
browser,
browser_version,
splunk_web_url,
splunk_mgmt_url,
debug=False,
cred=("admin", "Chang3d!"),
headless=False,
test_case=None,
):
self.splunk_web_url = splunk_web_url
self.splunk_mgmt_url = splunk_mgmt_url
self.cred = cred
self.test_case = test_case
self.skip_saucelab_job = False
if "grid" in browser:
self.skip_saucelab_job = True
debug = True
if not debug:
# Using Saucelabs
self.init_sauce_env_variables()
try:
if browser == "firefox":
if debug:
self.browser = webdriver.Firefox(
firefox_options=self.get_local_firefox_opts(headless),
log_path="selenium.log",
)
else:
> self.browser = webdriver.Remote(
command_executor="https://ondemand.saucelabs.com:443/wd/hub",
desired_capabilities=self.get_sauce_firefox_opts(
browser_version
),
)
/usr/local/lib/python3.10/dist-packages/pytest_splunk_addon_ui_smartx/base_test.py:87:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
command_executor = 'https://ondemand.saucelabs.com:443/wd/hub'
desired_capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None, proxy = None, keep_alive = False, file_detector = None
options = None
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None, options=None):
"""
Create a new driver that will issue commands using the wire protocol.
:Args:
- command_executor - Either a string representing URL of the remote server or a custom
remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.
- desired_capabilities - A dictionary of capabilities to request when
starting the browser session. Required parameter.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object.
Only used if Firefox is requested. Optional.
- proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will
be started with given proxy settings, if possible. Optional.
- keep_alive - Whether to configure remote_connection.RemoteConnection to use
HTTP keep-alive. Defaults to False.
- file_detector - Pass custom file detector object during instantiation. If None,
then default LocalFileDetector() will be used.
- options - instance of a driver options.Options class
"""
capabilities = {}
if options is not None:
capabilities = options.to_capabilities()
if desired_capabilities is not None:
if not isinstance(desired_capabilities, dict):
raise WebDriverException("Desired Capabilities must be a dictionary")
else:
capabilities.update(desired_capabilities)
if proxy is not None:
warnings.warn("Please use FirefoxOptions to set proxy",
DeprecationWarning, stacklevel=2)
proxy.add_to_capabilities(capabilities)
self.command_executor = command_executor
if type(self.command_executor) is bytes or isinstance(self.command_executor, str):
self.command_executor = RemoteConnection(command_executor, keep_alive=keep_alive)
self._is_remote = True
self.session_id = None
self.capabilities = {}
self.error_handler = ErrorHandler()
self.start_client()
if browser_profile is not None:
warnings.warn("Please use FirefoxOptions to set browser profile",
DeprecationWarning, stacklevel=2)
> self.start_session(capabilities, browser_profile)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
capabilities = {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}
browser_profile = None
def start_session(self, capabilities, browser_profile=None):
"""
Creates a new session with the desired capabilities.
:Args:
- browser_name - The name of the browser to request.
- version - Which browser version to request.
- platform - Which platform to request the browser on.
- javascript_enabled - Whether the new session should support JavaScript.
- browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})
w3c_caps = _make_w3c_caps(capabilities)
parameters = {"capabilities": w3c_caps,
"desiredCapabilities": capabilities}
> response = self.execute(Command.NEW_SESSION, parameters)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:252:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.webdriver.WebDriver (session="None")>
driver_command = 'newSession'
params = {'capabilities': {'alwaysMatch': {'acceptInsecureCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', '...ies': {'acceptInsecureCerts': True, 'acceptSslCerts': True, 'browserName': 'firefox', 'browserVersion': 'latest', ...}}
def execute(self, driver_command, params=None):
"""
Sends a command to be executed by a command.CommandExecutor.
:Args:
- driver_command: The name of the command to execute as a string.
- params: A dictionary of named parameters to send with the command.
:Returns:
The command's JSON response loaded into a dictionary object.
"""
if self.session_id is not None:
if not params:
params = {'sessionId': self.session_id}
elif 'sessionId' not in params:
params['sessionId'] = self.session_id
params = self._wrap_value(params)
response = self.command_executor.execute(driver_command, params)
if response:
> self.error_handler.check_response(response)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py:321:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f1315f16e30>
response = {'status': 500, 'value': '{"status": 13, "sessionId": "98f7c7df6b0b48c8877a06b94e43b82b", "value": {"message": "Sauce ...r more information on what happened, please visit https://app.saucelabs.com/tests/98f7c7df6b0b48c8877a06b94e43b82b"}}'}
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 = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
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
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
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:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.WebDriverException: Message: Sauce could not start your job. For more information on what happened, please visit https://app.saucelabs.com/tests/98f7c7df6b0b48c8877a06b94e43b82b
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException