Pei_Tree 2023-08-10 23:17 采纳率: 0%
浏览 33
已结题

自动化报错:Could not start a new session.java.util.concurrent.TimeoutException

在selenium grid 上浏览器升级后,自动化时不时得报Could not start a new session. java.util.concurrent.TimeoutException 得错误

selenium版本 :4.9.1
grid上浏览器版本:115.0.5790.170
chromedriver 版本: 115.0.5790.102 也替换过更高版本的也是报这个错

工作上很困扰,好几天没解决掉,望各位江湖英雄解惑

以下是报错日志

@pytest.fixture
    def Driver():
>       Driver = DRIVER()

C:\Program Files\Python37\lib\site-packages\FMpytestCommon\fixture.py:15: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
C:\Program Files\Python37\lib\site-packages\FMpytestCommon\driver.py:17: in __init__
    self._driver = self.get_browser()
C:\Program Files\Python37\lib\site-packages\FMpytestCommon\driver.py:31: in get_browser
    return self.get_remote_browser(remote_driver_url, broswer_type)
C:\Program Files\Python37\lib\site-packages\FMpytestCommon\driver.py:45: in get_remote_browser
    'acceptSslCerts': True
C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py:286: in __init__
    self.start_session(capabilities, browser_profile)
C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py:378: in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py:440: in execute
    self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x0000029DC38E4B88>
response = {'status': 500, 'value': '{\n  "value": {\n    "error": "session not created",\n    "message": "Could not start a new ..."className": "java.lang.Thread",\n        "lineNumber": 829,\n        "classLoaderName": null\n      }\n    ]\n  }\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) == 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 = f"{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.SessionNotCreatedException: Message: Could not start a new session. java.util.concurrent.TimeoutException
E       Build info: version: '4.11.0', revision: '040bc5406b'
E       System info: os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-211-generic', java.version: '11.0.20'
E       Driver info: driver.version: unknown 
E       Host info: host: '2fbdf7383444', ip: '172.23.0.13'
E       Stacktrace:
E           at org.openqa.selenium.grid.distributor.local.LocalDistributor.startSession (LocalDistributor.java:652)
E           at org.openqa.selenium.grid.distributor.local.LocalDistributor.newSession (LocalDistributor.java:565)
E           at org.openqa.selenium.grid.distributor.local.LocalDistributor$NewSessionRunnable.handleNewSessionRequest (LocalDistributor.java:829)
E           at org.openqa.selenium.grid.distributor.local.LocalDistributor$NewSessionRunnable.lambda$run$1 (LocalDistributor.java:785)
E           at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
E           at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
E           at java.lang.Thread.run (Thread.java:829)

C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py:245: SessionNotCreatedException

  • 写回答

7条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-11 08:52
    关注
    获得1.65元问题酬金

    【以下回答由 GPT 生成】

    这个问题可能是由于Selenium Grid无法启动新会话引起的。以下是一些可能的解决方案:

    1. 检查Selenium Grid的配置:检查Grid的配置文件,确保正确配置了节点和浏览器的连接。确认节点的配置中指定的浏览器驱动程序和版本与节点上实际安装的浏览器驱动程序和版本匹配。

    2. 检查网络连接:确保Selenium Grid服务器和节点之间的网络连接正常。尝试使用其他网络连接运行测试,以确定是否与网络连接有关。

    3. 检查防火墙设置:如果有防火墙或安全组配置,确保它们允许Selenium Grid服务器和节点之间的通信。

    4. 检查Grid和节点日志:查看Selenium Grid和节点的日志文件,查找任何有关这个问题的错误或警告信息。日志文件通常位于Grid和节点的安装目录下。

    5. 更新到最新版本:尝试更新Selenium Grid和浏览器驱动程序的版本,以确保它们与您使用的Selenium版本兼容。

    6. 检查测试代码:确保测试代码中的会话启动代码正确。尝试在不使用Grid的情况下直接连接到单个节点来测试会话启动是否正常。

    无论您选择哪种解决方案,请确保在尝试之前备份任何关键文件或数据。如果这些解决方案都没有解决问题,建议咨询Selenium Grid的官方文档和社区论坛,以获取更多帮助和支持。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭