Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

webdriver-manager not working when executed the tests from Jenkins #12676

Closed
brahmakothapalli opened this issue Dec 14, 2022 · 1 comment
Closed
Labels
bug 🐛 not-this-repo For any issues that are not for this repository

Comments

@brahmakothapalli
Copy link

Below is my test, when executed locally (Ubuntu22.04) this works fine but when I try to execute the same from Jenkins throwing below issue.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def test_google_search():
'''Executing the test_google_search'''
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.maximize_window()
driver.get("http://www.google.com")
driver.find_element(By.NAME , "q").send_keys("brahmakothapalli.hashnode.com", Keys.ENTER)
print(driver.title)
print("Execution completed :: test_google_search")
driver.quit()

Issue:
def test_google_search():
'''Executing the test_google_search'''
srvc = Service("/usr/bin/chromedriver")
chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless')

  driver = webdriver.Chrome(service=srvc, options=chrome_options)

tests/test_google_search.py:15:


.venv/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py:81: in init
super().init(
.venv/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py:106: in init
super().init(
.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:288: in init
self.start_session(capabilities, browser_profile)
.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:381: in start_session
response = self.execute(Command.NEW_SESSION, parameters)
.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:444: in execute
self.error_handler.check_response(response)


self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f4024718790>
response = {'status': 500, 'value': '{"value":{"error":"unknown error","message":"unknown error: Chrome failed to start: exited a...\n#15 0x559ac4e1be36 \u003Cunknown>\n#16 0x559ac4e37333 \u003Cunknown>\n#17 0x7f1fe7db3b43 \u003Cunknown>\n"}}'}

def check_response(self, response: Dict[str, Any]) -> None:
    """
    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 not status or status == ErrorCode.SUCCESS:
        return
    value = None
    message = response.get("message", "")
    screen: str = response.get("screen", "")
    stacktrace = None
    if isinstance(status, int):
        value_json = response.get("value", None)
        if value_json and isinstance(value_json, str):
            import json

            try:
                value = json.loads(value_json)
                if len(value.keys()) == 1:
                    value = value["value"]
                status = value.get("error", None)
                if not status:
                    status = value.get("status", ErrorCode.UNKNOWN_ERROR)
                    message = value.get("value") or value.get("message")
                    if not isinstance(message, str):
                        value = message
                        message = message.get("message")
                else:
                    message = value.get("message", None)
            except ValueError:
                pass

    exception_class: Type[WebDriverException]
    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_SHADOW_ROOT:
        exception_class = NoSuchShadowRootException
    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 not value:
        value = response["value"]
    if isinstance(value, str):
        raise exception_class(value)
    if message == "" and "message" in value:
        message = value["message"]

    screen = None  # type: ignore[assignment]
    if "screen" in value:
        screen = value["screen"]

    stacktrace = None
    st_value = value.get("stackTrace") or value.get("stacktrace")
    if st_value:
        if isinstance(st_value, str):
            stacktrace = st_value.split("\n")
        else:
            stacktrace = []
            try:
                for frame in st_value:
                    line = frame.get("lineNumber", "")
                    file = frame.get("fileName", "<anonymous>")
                    if line:
                        file = f"{file}:{line}"
                    meth = frame.get("methodName", "<anonymous>")
                    if "className" in frame:
                        meth = "{}.{}".format(frame["className"], meth)
                    msg = "    at %s (%s)"
                    msg = msg % (meth, file)
                    stacktrace.append(msg)
            except TypeError:
                pass
    if 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)  # type: ignore[call-arg]  # mypy is not smart enough here
  raise exception_class(message, screen, stacktrace)

E selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
E (unknown error: DevToolsActivePort file doesn't exist)
E (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
E Stacktrace:
E #0 0x559ac4da62a3
E #1 0x559ac4b64f77
E #2 0x559ac4b8d5f7
E #3 0x559ac4b897d0
E #4 0x559ac4bca0b7
E #5 0x559ac4bc9a5f
E #6 0x559ac4bc1903
E #7 0x559ac4b94ece
E #8 0x559ac4b95fde
E #9 0x559ac4df663e
E #10 0x559ac4df9b79
E #11 0x559ac4ddc89e
E #12 0x559ac4dfaa83
E #13 0x559ac4dcf505
E #14 0x559ac4e1bca8
E #15 0x559ac4e1be36
E #16 0x559ac4e37333
E #17 0x7f1fe7db3b43

.venv/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py:249: WebDriverException
=========================== short test summary info ============================
FAILED tests/test_google_search.py::test_google_search - selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

@brahmakothapalli brahmakothapalli added bug 🐛 requires triaging maintainers need to do initial inspection of issue labels Dec 14, 2022
@ewdurbin
Copy link
Member

Hi @brahmakothapalli, this issue tracker is for issues with the PyPI.org service itself and not the projects hosted there. I believe you should file your issue with the selenium project at https://github.com/SeleniumHQ/selenium/issues

@miketheman miketheman added not-this-repo For any issues that are not for this repository and removed requires triaging maintainers need to do initial inspection of issue labels Mar 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 🐛 not-this-repo For any issues that are not for this repository
Projects
None yet
Development

No branches or pull requests

3 participants