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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

[馃悰 Bug]: Browser closes after a short time #2084

Open
GuillaumeFradet opened this issue Jan 8, 2024 · 39 comments
Open

[馃悰 Bug]: Browser closes after a short time #2084

GuillaumeFradet opened this issue Jan 8, 2024 · 39 comments

Comments

@GuillaumeFradet
Copy link

What happened?

Capture d鈥櫭ヽran du 2024-01-08 19-03-40
Since today, whereas before it worked perfectly.
The browser seems to close after a few minutes.
However, I haven't changed anything in my configuration.
Have you added a timeout somewhere?

As you can see from the screenshot, there's no longer a browser present in the session, yet the session remains active and the script continues to run on it.

Command used to start Selenium Grid with Docker (or Kubernetes)

global:
  seleniumGrid:
    # Image registry for all selenium components
    imageRegistry: selenium
    # Image tag for all selenium components
    imageTag: 4.16.1-20231212
    # Image tag for browser's nodes
    nodesImageTag: 4.16.1-20231212
    # Image tag for browser's video recorder
    videoImageTag: ffmpeg-6.1-20231212
    # Pull secret for all components, can be overridden individually
    imagePullSecret: ""

# Basic auth settings for Selenium Grid
basicAuth:
  # Enable or disable basic auth
  enabled: true
  # Username for basic auth
  username: admin
  # Password for basic auth
  password: xxxxx

# Deploy Router, Distributor, EventBus, SessionMap and Nodes separately
isolateComponents: false

# Service Account for all components
serviceAccount:
  create: true
  name: ""
  annotations: {}
  #  eks.amazonaws.com/role-arn: "arn:aws:iam::12345678:role/video-bucket-permissions"

# Configure the ingress resource to access the Grid installation.
ingress:
  # Enable or disable ingress resource
  enabled: true
  # Name of ingress class to select which controller will implement ingress resource
  className: ""
  # Refer to list nginx annotations: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md#annotations
  nginx:
    proxyTimeout: 3600
    proxyBuffer:
      size: 512M
      number: 4
  # Custom annotations for ingress resource
  annotations: {}
  # Default host for the ingress resource
  hostname: ""
  # Default host path for the ingress resource
  path: /
  # Default path type for the ingress resource
  pathType: Prefix
  # List of paths for the ingress resource. This will override the default path
  paths: []
  # TLS backend configuration for ingress resource
  tls: []

# ConfigMap that contains SE_EVENT_BUS_HOST, SE_EVENT_BUS_PUBLISH_PORT and SE_EVENT_BUS_SUBSCRIBE_PORT variables
busConfigMap:
  # Name of the configmap
  name: selenium-event-bus-config
  # Custom annotations for configmap
  annotations: {}

# ConfigMap that contains common environment variables for browser nodes
nodeConfigMap:
  name: selenium-node-config
  # Custom annotations for configmap
  annotations: {}

# Configuration for isolated components (applied only if `isolateComponents: true`)
components:

  # Configuration for router component
  router:
    # imageRegistry: selenium
    # Router image name
    imageName: router
    # Router image tag (this overwrites global.seleniumGrid.imageTag parameter)
    # imageTag: 4.16.1-20231212

    # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
    imagePullPolicy: IfNotPresent
    # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
    imagePullSecret: ""

    # Custom annotations for router pods
    annotations: {}
    # Router port
    port: 4444
    # Liveness probe settings
    livenessProbe:
      enabled: true
      path: /readyz
      initialDelaySeconds: 10
      failureThreshold: 10
      timeoutSeconds: 10
      periodSeconds: 10
      successThreshold: 1
    # Readiness probe settings
    readinessProbe:
      enabled: true
      path: /readyz
      initialDelaySeconds: 12
      failureThreshold: 10
      timeoutSeconds: 10
      periodSeconds: 10
      successThreshold: 1
    # Resources for router container
    resources: {}
    # SecurityContext for router container
    securityContext: {}
    # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
    serviceType: ClusterIP
    # Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
    loadBalancerIP: ""
    # Custom annotations for router service
    serviceAnnotations: {}
    # Tolerations for router pods
    tolerations: []
    # Node selector for router pods
    nodeSelector: {}
    # Priority class name for router pods
    priorityClassName: ""

  # Configuration for distributor component
  distributor:
    # imageRegistry: selenium
    # Distributor image name
    imageName: distributor
    # Distributor image tag (this overwrites global.seleniumGrid.imageTag parameter)
    # imageTag: 4.16.1-20231212

    # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
    imagePullPolicy: IfNotPresent
    # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
    imagePullSecret: ""

    # Custom annotations for Distributor pods
    annotations: {}
    # Distributor port
    port: 5553
    # Resources for Distributor container
    resources: {}
    # SecurityContext for Distributor container
    securityContext: {}
    # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
    serviceType: ClusterIP
    # Custom annotations for Distributor service
    serviceAnnotations: {}
    # Tolerations for Distributor pods
    tolerations: []
    # Node selector for Distributor pods
    nodeSelector: {}
    # Priority class name for Distributor pods
    priorityClassName: ""

  # Configuration for Event Bus component
  eventBus:
    # imageRegistry: selenium
    # Event Bus image name
    imageName: event-bus
    # Event Bus image tag (this overwrites global.seleniumGrid.imageTag parameter)
    # imageTag: 4.16.1-20231212

    # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
    imagePullPolicy: IfNotPresent
    # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
    imagePullSecret: ""

    # Custom annotations for Event Bus pods
    annotations: {}
    # Event Bus port
    port: 5557
    # Port where events are published
    publishPort: 4442
    # Port where to subscribe for events
    subscribePort: 4443
    # Resources for event-bus container
    resources: {}
    # SecurityContext for event-bus container
    securityContext: {}
    # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
    serviceType: ClusterIP
    # Custom annotations for Event Bus service
    serviceAnnotations: {}
    # Tolerations for Event Bus pods
    tolerations: []
    # Node selector for Event Bus pods
    nodeSelector: {}
    # Priority class name for Event Bus pods
    priorityClassName: ""

  # Configuration for Session Map component
  sessionMap:
    # imageRegistry: selenium
    # Session Map image name
    imageName: sessions
    # Session Map image tag (this overwrites global.seleniumGrid.imageTag parameter)
    # imageTag: 4.16.1-20231212

    # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
    imagePullPolicy: IfNotPresent
    # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
    imagePullSecret: ""

    # Custom annotations for Session Map pods
    annotations: {}
    port: 5556
    # Resources for Session Map container
    resources: {}
    # SecurityContext for Session Map container
    securityContext: {}
    # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
    serviceType: ClusterIP
    # Custom annotations for Session Map service
    serviceAnnotations: {}
    # Tolerations for Session Map pods
    tolerations: []
    # Node selector for Session Map pods
    nodeSelector: {}
    # Priority class name for Session Map pods
    priorityClassName: ""

  # Configuration for Session Queue component
  sessionQueue:
    # imageRegistry: selenium
    # Session Queue image name
    imageName: session-queue
    # Session Queue image tag (this overwrites global.seleniumGrid.imageTag parameter)
    # imageTag: 4.16.1-20231212

    # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
    imagePullPolicy: IfNotPresent
    # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
    imagePullSecret: ""

    # Custom annotations for Session Queue pods
    annotations: {}
    port: 5559
    # Resources for Session Queue container
    resources: {}
    # SecurityContext for Session Queue container
    securityContext: {}
    # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
    serviceType: ClusterIP
    # Custom annotations for Session Queue service
    serviceAnnotations: {}
    # Tolerations for Session Queue pods
    tolerations: []
    # Node selector for Session Queue pods
    nodeSelector: {}
    # Priority class name for Session Queue pods
    priorityClassName: ""

  # Custom sub path for all components
  subPath: /

  # Custom environment variables for all components
  extraEnvironmentVariables:
    # - name: SE_JAVA_OPTS
    #   value: "-Xmx512m"
    # - name:
    #   valueFrom:
    #     secretKeyRef:
    #       name: secret-name
    #       key: secret-key

  # Custom environment variables by sourcing entire configMap, Secret, etc. for all components
  extraEnvFrom:
    # - configMapRef:
    #   name: proxy-settings
    # - secretRef:
    #   name: mysecret

# Configuration for selenium hub deployment (applied only if `isolateComponents: false`)
hub:
  # imageRegistry: selenium
  # Selenium Hub image name
  imageName: hub
  # Selenium Hub image tag (this overwrites global.seleniumGrid.imageTag parameter)
  # imageTag: 4.16.1-20231212
  # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
  imagePullPolicy: IfNotPresent
  # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
  imagePullSecret: ""

  # Custom annotations for Selenium Hub pods
  annotations: {}
  # Custom labels for Selenium Hub pods
  labels: {}
  # Port where events are published
  publishPort: 4442
  # Port where to subscribe for events
  subscribePort: 4443
  # Selenium Hub port
  port: 4444
  # Liveness probe settings
  livenessProbe:
    enabled: true
    path: /readyz
    initialDelaySeconds: 10
    failureThreshold: 10
    timeoutSeconds: 10
    periodSeconds: 10
    successThreshold: 1
  # Readiness probe settings
  readinessProbe:
    enabled: true
    path: /readyz
    initialDelaySeconds: 12
    failureThreshold: 10
    timeoutSeconds: 10
    periodSeconds: 10
    successThreshold: 1
  # Custom sub path for the hub deployment
  subPath: /
  # Custom environment variables for selenium-hub
  extraEnvironmentVariables:
    - name: SE_SESSION_REQUEST_TIMEOUT
      value: "5400"
    - name: SE_SESSION_RETRY_INTERVAL
      value: "15"
    - name: SE_NODE_SESSION_TIMEOUT
      value: "5400"
    #- name: SE_DRAIN_AFTER_SESSION_COUNT
    #  value: "1"
    # - name: SE_JAVA_OPTS
    #   value: "-Xmx512m"
    # - name: SECRET_VARIABLE
    #   valueFrom:
    #     secretKeyRef:
    #       name: secret-name
    #       key: secret-key
  # Custom environment variables by sourcing entire configMap, Secret, etc. for selenium-hub
  extraEnvFrom:
    # - configMapRef:
    #   name: proxy-settings
    # - secretRef:
    #   name: mysecret
  extraVolumeMounts: []
  # - name: my-extra-volume
  #   mountPath: /home/seluser/Downloads

  extraVolumes: []
  # - name: my-extra-volume
  #   emptyDir: {}
  # - name: my-extra-volume-from-pvc
  #   persistentVolumeClaim:
  #     claimName: my-pv-claim
  # Resources for selenium-hub container
  resources: {}
  # SecurityContext for selenium-hub container
  securityContext: {}
  # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
  serviceType: LoadBalancer
  # Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
  loadBalancerIP: ""
  # Custom annotations for Selenium Hub service
  serviceAnnotations: {}
  # Tolerations for selenium-hub pods
  tolerations: []
  # Node selector for selenium-hub pods
  nodeSelector: {}
  # Priority class name for selenium-hub pods
  priorityClassName: ""

# Keda scaled object configuration
autoscaling:
  # Enable autoscaling. Implies installing KEDA
  enabled: true
  # Enable autoscaling without automatically installing KEDA
  enableWithExistingKEDA: false
  # Which type of KEDA scaling to use: job or deployment
  scalingType: job
  # Annotations for KEDA resources: ScaledObject and ScaledJob
  annotations:
    helm.sh/hook: post-install,post-upgrade
  # Options for KEDA scaled resources (keep only common options used for both ScaledJob and ScaledObject)
  scaledOptions:
    minReplicaCount: 0
    maxReplicaCount: 500
    pollingInterval: 10
    # List of triggers. Be careful, the default trigger of selenium-grid will be overwritten if you specify this
    #triggers:
    #  - type: selenium-grid
    #    metadata:
    #      url: 'http://selenium-hub:4444/graphql' # Required
    #      browserName: 'chrome'  # Required
          #browserVersion: '91.0' # Optional. Only required when supporting multiple versions of browser in your Selenium Grid.
    #      unsafeSsl : 'true' # Optional
  # Options for KEDA ScaledJobs (only used when scalingType is set to "job")
  # see https://keda.sh/docs/4.16.1-20231212/concepts/scaling-jobs/#scaledjob-spec
  scaledJobOptions:
    scalingStrategy:
      strategy: default
    # Number of Completed jobs should be kept
    successfulJobsHistoryLimit: 0
    # Number of Failed jobs should be kept (for troubleshooting purposes)
    failedJobsHistoryLimit: 0
    jobTargetRef:
      parallelism: 1
      completions: 1
      backoffLimit: 0
     # activeDeadlineSeconds: 15 Coupe tout de la mauvaise fa莽on
    deregisterLifecycle:
    preStop:
      exec:
        command:
          - bash
          - -c
          - |
            curl -X POST 127.0.0.1:5555/se/grid/node/drain --header 'X-REGISTRATION-SECRET;' && \
            while curl 127.0.0.1:5555/status; do sleep 1; done;

  # Options for KEDA ScaledObjects (only used when scalingType is set to "deployment")
  # see https://keda.sh/docs/4.16.1-20231212/concepts/scaling-deployments/#scaledobject-spec
  scaledObjectOptions:
    scaleTargetRef:
      kind: Deployment
  deregisterLifecycle:
    preStop:
      exec:
        command:
          - bash
          - -c
          - |
            curl -X POST 127.0.0.1:5555/se/grid/node/drain --header 'X-REGISTRATION-SECRET;' && \
            while curl 127.0.0.1:5555/status; do sleep 1; done;

# Configuration for chrome nodes
chromeNode:
  # Enable chrome nodes
  enabled: true

  # NOTE: Only used when autoscaling.enabled is false
  # Enable creation of Deployment
  # true (default) - if you want long living pods
  # false - for provisioning your own custom type such as Jobs
  deploymentEnabled: true

  # Number of chrome nodes
  replicas: 1
  # imageRegistry: selenium
  # Image of chrome nodes
  imageName: node-chrome
  # Image of chrome nodes (this overwrites global.seleniumGrid.nodesImageTag)
  # imageTag: 4.16.1-20231212
  # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
  imagePullPolicy: IfNotPresent
  # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
  imagePullSecret: ""

  # Port list to enable on container
  ports:
    - 5555
  # Selenium port (spec.ports[0].targetPort in kubernetes service)
  seleniumPort: 5900
  # Selenium port exposed in service (spec.ports[0].port in kubernetes service)
  seleniumServicePort: 6900
  # Annotations for chrome-node pods
  annotations: {}
  # Labels for chrome-node pods
  labels: {}
  # Resources for chrome-node container
  resources:
    requests:
      memory: "1300Mi"
      cpu: "1"
    limits:
      memory: "1300Mi"
      cpu: "1"
  # SecurityContext for chrome-node container
  securityContext: {}
  # Tolerations for chrome-node pods
  tolerations: []
  # Node selector for chrome-node pods
  nodeSelector: {}
  # Custom host aliases for chrome nodes
  hostAliases:
    # - ip: "198.51.100.0"
    #   hostnames:
    #     - "example.com"
    #     - "example.net"
    # - ip: "203.0.113.0"
    #   hostnames:
    #     - "example.org"
  # Custom environment variables for chrome nodes
  extraEnvironmentVariables:
    - name: SE_SESSION_REQUEST_TIMEOUT
      value: "5400"
    - name: SE_SESSION_RETRY_INTERVAL
      value: "15"
    - name: SE_NODE_SESSION_TIMEOUT
      value: "5400"
    #- name: SE_DRAIN_AFTER_SESSION_COUNT
    #  value: "1"  
    # - name: SE_JAVA_OPTS
    #   value: "-Xmx512m"
    # - name:
    #   valueFrom:
    #     secretKeyRef:
    #       name: secret-name
    #       key: secret-key
  # Custom environment variables by sourcing entire configMap, Secret, etc. for chrome nodes
  extraEnvFrom:
    # - configMapRef:
    #   name: proxy-settings
    # - secretRef:
    #   name: mysecret
  # Service configuration
  service:
    # Create a service for node
    enabled: true
    # Service type
    type: ClusterIP
    # Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
    loadBalancerIP: ""
    # Extra ports exposed in node service
    ports:
    # - name: node-port
    #   port: 5555
    #   targetPort: 5555
    # Custom annotations for service
    annotations: {}
  # Size limit for DSH volume mounted in container (if not set, default is "1300Mi")
  dshmVolumeSizeLimit: 1300Mi
  # Priority class name for chrome-node pods
  priorityClassName: ""

  # Wait for pod startup
  startupProbe: {}
    # httpGet:
    #   path: /status
    #   port: 5555
    # failureThreshold: 120
    # periodSeconds: 5

  # Liveness probe settings
  livenessProbe: {}

  # Time to wait for pod termination
  terminationGracePeriodSeconds: 30
  lifecycle: {}
  extraVolumeMounts: []
  # - name: my-extra-volume
  #   mountPath: /home/seluser/Downloads

  extraVolumes: []
  # - name: my-extra-volume
  #   emptyDir: {}
  # - name: my-extra-volume-from-pvc
  #   persistentVolumeClaim:
  #     claimName: my-pv-claim

  # Override the scaled options for chrome nodes
  # scaledOptions:
  # scaledJobOptions:
  # scaledObjectOptions:
  hpa:
    url: '{{ include "seleniumGrid.graphqlURL" . }}'
    browserName: chrome
    # browserVersion: '91.0' # Optional. Only required when supporting multiple versions of browser in your Selenium Grid.
    unsafeSsl: 'true'  # Optional

  # It is used to add a sidecars proxy in the same pod of the browser node.
  # It means it will add a new container to the deployment itself.
  # It should be set using the --set-json option
  sidecars: []


# Configuration for firefox nodes
firefoxNode:
  # Enable firefox nodes
  enabled: false

  # NOTE: Only used when autoscaling.enabled is false
  # Enable creation of Deployment
  # true (default) - if you want long living pods
  # false - for provisioning your own custom type such as Jobs
  deploymentEnabled: true

  # Number of firefox nodes
  replicas: 1
  # imageRegistry: selenium
  # Image of firefox nodes
  imageName: node-firefox
  # Image of firefox nodes (this overwrites global.seleniumGrid.nodesImageTag)
  # imageTag: 4.16.1-20231212
  # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
  imagePullPolicy: IfNotPresent
  # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
  imagePullSecret: ""

  # Port list to enable on container
  ports:
    - 5555
  # Selenium port (spec.ports[0].targetPort in kubernetes service)
  seleniumPort: 5900
  # Selenium port exposed in service (spec.ports[0].port in kubernetes service)
  seleniumServicePort: 6900
  # Annotations for firefox-node pods
  annotations: {}
  # Labels for firefox-node pods
  labels: {}
  # Tolerations for firefox-node pods
  tolerations: []
  # Node selector for firefox-node pods
  nodeSelector: {}
  # Resources for firefox-node container
  resources:
    requests:
      memory: "1300Mi"
      cpu: "1"
    limits:
      memory: "1300Mi"
      cpu: "1"
  # SecurityContext for firefox-node container
  securityContext: {}
  # Custom host aliases for firefox nodes
  hostAliases:
    # - ip: "198.51.100.0"
    #   hostnames:
    #     - "example.com"
    #     - "example.net"
    # - ip: "203.0.113.0"
    #   hostnames:
    #     - "example.org"
  # Custom environment variables for firefox nodes
  extraEnvironmentVariables:
    # - name: SE_JAVA_OPTS
    #   value: "-Xmx512m"
    # - name:
    #   valueFrom:
    #     secretKeyRef:
    #       name: secret-name
    #       key: secret-key
  # Custom environment variables by sourcing entire configMap, Secret, etc. for firefox nodes
  extraEnvFrom:
    # - configMapRef:
    #   name: proxy-settings
    # - secretRef:
    #   name: mysecret
  # Service configuration
  service:
    # Create a service for node
    enabled: true
    # Service type
    type: ClusterIP
    # Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
    loadBalancerIP: ""
    # Extra ports exposed in node service
    ports:
    # - name: node-port
    #   port: 5555
    #   targetPort: 5555
    # Custom annotations for service
    annotations: {}
  # Size limit for DSH volume mounted in container (if not set, default is "1300Mi")
  dshmVolumeSizeLimit: 1300Mi
  # Priority class name for firefox-node pods
  priorityClassName: ""

  # Wait for pod startup
  startupProbe: {}
    # httpGet:
    #   path: /status
    #   port: 5555
    # failureThreshold: 120
    # periodSeconds: 5

  # Liveness probe settings
  livenessProbe: {}

  # Time to wait for pod termination
  terminationGracePeriodSeconds: 30
  lifecycle: {}
  extraVolumeMounts: []
  # - name: my-extra-volume
  #   mountPath: /home/seluser/Downloads

  extraVolumes: []
  # - name: my-extra-volume
  #   emptyDir: {}
  # - name: my-extra-volume-from-pvc
  #   persistentVolumeClaim:
  #     claimName: my-pv-claim

  # Override the scaled options for firefox nodes
  # scaledOptions:
  # scaledJobOptions:
  # scaledObjectOptions:
  hpa:
    url: '{{ include "seleniumGrid.graphqlURL" . }}'
    browserName: firefox

  # It is used to add a sidecars proxy in the same pod of the browser node.
  # It means it will add a new container to the deployment itself.
  # It should be set using the --set-json option
  sidecars: []

# Configuration for edge nodes
edgeNode:
  # Enable edge nodes
  enabled: false

  # NOTE: Only used when autoscaling.enabled is false
  # Enable creation of Deployment
  # true (default) - if you want long living pods
  # false - for provisioning your own custom type such as Jobs
  deploymentEnabled: true

  # Number of edge nodes
  replicas: 1
  # imageRegistry: selenium
  # Image of edge nodes
  imageName: node-edge
  # Image of edge nodes (this overwrites global.seleniumGrid.nodesImageTag)
  # imageTag: 4.16.1-20231212
  # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
  imagePullPolicy: IfNotPresent
  # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
  imagePullSecret: ""

  ports:
    - 5555
  # Selenium port (spec.ports[0].targetPort in kubernetes service)
  seleniumPort: 5900
  # Selenium port exposed in service (spec.ports[0].port in kubernetes service)
  seleniumServicePort: 6900
  # Annotations for edge-node pods
  annotations: {}
  # Labels for edge-node pods
  labels: {}
  # Tolerations for edge-node pods
  tolerations: []
  # Node selector for edge-node pods
  nodeSelector: {}
  # Resources for edge-node container
  resources:
    requests:
      memory: "1300Mi"
      cpu: "1"
    limits:
      memory: "1300Mi"
      cpu: "1"
  # SecurityContext for edge-node container
  securityContext: {}
  # Custom host aliases for edge nodes
  hostAliases:
    # - ip: "198.51.100.0"
    #   hostnames:
    #     - "example.com"
    #     - "example.net"
    # - ip: "203.0.113.0"
    #   hostnames:
    #     - "example.org"
  # Custom environment variables for edge nodes
  extraEnvironmentVariables:
    # - name: SE_JAVA_OPTS
    #   value: "-Xmx512m"
    # - name:
    #   valueFrom:
    #     secretKeyRef:
    #       name: secret-name
    #       key: secret-key
  # Custom environment variables by sourcing entire configMap, Secret, etc. for edge nodes
  extraEnvFrom:
    # - configMapRef:
    #   name: proxy-settings
    # - secretRef:
    #   name: mysecret
  # Service configuration
  service:
    # Create a service for node
    enabled: true
    # Service type
    type: ClusterIP
    # Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
    loadBalancerIP: ""
    # Extra ports exposed in node service
    ports:
    # - name: node-port
    #   port: 5555
    #   targetPort: 5555
    # Custom annotations for service
    annotations: {}
  # Size limit for DSH volume mounted in container (if not set, default is "1300Mi")
  dshmVolumeSizeLimit: 1300Mi
  # Priority class name for edge-node pods
  priorityClassName: ""

  # Wait for pod startup
  startupProbe: {}
    # httpGet:
    #   path: /status
    #   port: 5555
    # failureThreshold: 120
    # periodSeconds: 5

  # Liveness probe settings
  livenessProbe: {}

  # Time to wait for pod termination
  terminationGracePeriodSeconds: 30
  lifecycle: {}
  extraVolumeMounts: []
  # - name: my-extra-volume
  #   mountPath: /home/seluser/Downloads

  extraVolumes: []
  # - name: my-extra-volume
  #   emptyDir: {}
  # - name: my-extra-volume-from-pvc
  #   persistentVolumeClaim:
  #     claimName: my-pv-claim

  # Override the scaled options for edge nodes
  # scaledOptions:
  # scaledJobOptions:
  # scaledObjectOptions:
  hpa:
    url: '{{ include "seleniumGrid.graphqlURL" . }}'
    browserName: MicrosoftEdge
    sessionBrowserName: 'msedge'

  # It is used to add a sidecars proxy in the same pod of the browser node.
  # It means it will add a new container to the deployment itself.
  # It should be set using the --set-json option
  sidecars: []

videoRecorder:
  enabled: false
  # imageRegistry: selenium
  # Image of video recorder
  imageName: video
  # Image of video recorder
  # imageTag: ffmpeg-6.1-20231212
  # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
  imagePullPolicy: IfNotPresent
  # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)

  # What uploader to use. See .videRecorder.s3 for how to create a new one.
  # uploader: s3
  uploader: false
  # Where to upload the video file. Should be set to something like 's3://myvideobucket/'
  uploadDestinationPrefix: false

  ports:
  - 9000
  resources:
    requests:
      memory: "1300Mi"
      cpu: "1"
    limits:
      memory: "1300Mi"
      cpu: "1"
  extraEnvironmentVariables:
  # - name: SE_VIDEO_FOLDER
  #   value: /videos
  # Custom environment variables by sourcing entire configMap, Secret, etc. for video recorder.
  extraEnvFrom:
  # - configMapRef:
  #   name: proxy-settings
  # - secretRef:
  #   name: mysecret
  # Wait for pod startup
  terminationGracePeriodSeconds: 30

  # Wait for pod startup
  startupProbe: {}
  #   httpGet:
  #     path: /
  #     port: 9000
  #   failureThreshold: 120
  # periodSeconds: 5

  # Liveness probe settings
  livenessProbe: {}

  volume:
  # name:
  #   folder: video
  #   scripts: video-scripts
  # Custom video recorder back-end scripts (video.sh, video_ready.py, etc.) further by ConfigMap.
  # NOTE: For the mount point with the name "video", or "video-scripts", it will override the default. For other names, it will be appended.
  extraVolumeMounts: []
  # - name: video-scripts
  #   mountPath: /opt/bin/video.sh
  #   subPath: custom_video.sh
  # - name: video-scripts
  #   mountPath: /opt/bin/video_ready.py
  #   subPath: video_ready.py

  extraVolumes: []
  # - name: video-scripts
  #   configMap:
  #     name: my-video-scripts-cm
  #     defaultMode: 0500
  # - name: video
  #   persistentVolumeClaim:
  #     claimName: video-pv-claim

  # Container spec for the uploader if above it is defined as "uploader: s3"
  s3:
    imageName: public.ecr.aws/bitnami/aws-cli
    imageTag: "2"
    imagePullPolicy: IfNotPresent
    securityContext:
      runAsUser: 0
    command:
    - /bin/sh
    args:
    - -c
    - |
      while ! [ -p /videos/uploadpipe ]
      do
          echo Waiting for /videos/uploadpipe to be created
          sleep 1
      done
      echo Waiting for files to upload
      while read FILE DESTINATION < /videos/uploadpipe
      do
          if [ "$FILE" = "exit" ]
          then
              echo "$FILE"
              break
          else
              echo "Uploading $FILE to $DESTINATION"
              aws s3 cp --no-progress $FILE $DESTINATION
          fi
      done
    extraEnvironmentVariables:
    # - name: AWS_ACCESS_KEY_ID
    #   value: aws_access_key_id
    # - name: AWS_SECRET_ACCESS_KEY
    #   value: aws_secret_access_key
    # - name:
    #   valueFrom:
    #     secretKeyRef:
    #       name: secret-name
    #       key: secret-key

# Custom labels for k8s resources
customLabels: {}

Relevant log output

No specific log output

Operating System

Kubernetes

Docker Selenium version (image tag)

4.16.1-20231212

Selenium Grid chart version (chart version)

No response

Copy link

github-actions bot commented Jan 8, 2024

@GuillaumeFradet, thank you for creating this issue. We will troubleshoot it as soon as we can.


Info for maintainers

Triage this issue by using labels.

If information is missing, add a helpful comment and then I-issue-template label.

If the issue is a question, add the I-question label.

If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.

If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C), add the applicable G-* label, and it will provide the correct link and auto-close the issue.

After troubleshooting the issue, please add the R-awaiting answer label.

Thank you!

@VietND96
Copy link
Member

VietND96 commented Jan 8, 2024

I saw in the chart YAML that the image tag is 4.16.1-20231212 but in screenshot chrome version is v115?
With node chrome v115 (image tag < 4.16.1) I guess it could be going to the situation in #2045

@GuillaumeFradet
Copy link
Author

Sorry the screenshot was from an other cluster where i use 4.11 and get the same problem.I tried again on the cluster where I have 4.16 and I have the same problem even though I have a version 120 of the browser. I'm going to test with a version 118.
Capture d鈥櫭ヽran du 2024-01-09 07-43-01

@VietND96
Copy link
Member

VietND96 commented Jan 9, 2024

Ah ok, can you do one more step that open tab Network in e.g Chrome DevTools to see the Websockets request URL and there status, something like
image

@GuillaumeFradet
Copy link
Author

I have this in DevTools
Capture d鈥櫭ヽran du 2024-01-09 08-05-16

@GuillaumeFradet
Copy link
Author

When i look into console i get this error .It certainly comes from this
Capture d鈥櫭ヽran du 2024-01-09 08-19-06

@VietND96
Copy link
Member

VietND96 commented Jan 9, 2024

Does your deployment have ingress upfront? if yes, can you try a trick by opening Grid URL with schema HTTPS to see how it behaves?

@GuillaumeFradet
Copy link
Author

No sorry i don't have ingress upfront

@VietND96
Copy link
Member

VietND96 commented Jan 9, 2024

Yes, it looks similar the same behavior was reproduced here - SeleniumHQ/selenium#13393 (comment)
Even I also tried the same in my local but didn't see that error message. Will let you know it we have any clue

@GuillaumeFradet
Copy link
Author

I see that the issue you mentioned has just been marked as fixed, which means that the problem has been solved?

@diemol
Copy link
Member

diemol commented Jan 9, 2024

We mark them as fixed then the code has landed, however we still need to do a new release.

@VietND96
Copy link
Member

VietND96 commented Jan 9, 2024

I see that the issue you mentioned has just been marked as fixed, which means that the problem has been solved?

Ah, the background is the issue relates to the Grid with --sub-path not opening sessions Websockets (novnc, cdp, etc.) correctly in the upstream repo, which was fixed.
While trying a test image to confirm, he reported that While the WebSocket connection is successful, it seems to close immediately if the Duration is less than 10 seconds. It's not exact, but it appears that only after exceeding about 10 seconds -> with the same error could be seen noVNC requires a secure context (TLS). Expect crashes! in console -> If any clues relate to this error, we will continue discussing it here

@GuillaumeFradet
Copy link
Author

GuillaumeFradet commented Jan 9, 2024

While waiting for the patch to be deployed, I tried to disable noVnc. I did see the start_vnc option with the value false.
But by setting it like that I still get the record.
Should I set it differently?
That would allow me to use the service while waiting for the next version.


chromeNode:
  # Enable chrome nodes
  enabled: true
  vncEnabled: false
  # NOTE: Only used when autoscaling.enabled is false
  # Enable creation of Deployment
  # true (default) - if you want long living pods
  # false - for provisioning your own custom type such as Jobs
  deploymentEnabled: true

  # Number of chrome nodes
  replicas: 1
  # imageRegistry: selenium
  # Image of chrome nodes
  imageName: node-chrome
  # Image of chrome nodes (this overwrites global.seleniumGrid.nodesImageTag)
  # imageTag: 4.16.1-20231212
  # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
  imagePullPolicy: IfNotPresent
  # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
  imagePullSecret: ""

  # Port list to enable on container
  ports:
    - 5555
  # Selenium port (spec.ports[0].targetPort in kubernetes service)
  seleniumPort: 5900
  # Selenium port exposed in service (spec.ports[0].port in kubernetes service)
  seleniumServicePort: 6900
  # Annotations for chrome-node pods
  annotations: {}
  # Labels for chrome-node pods
  labels: {}
  # Resources for chrome-node container
  resources:
    requests:
      memory: "1300Mi"
      cpu: "1"
    limits:
      memory: "1300Mi"
      cpu: "1"
  # SecurityContext for chrome-node container
  securityContext: {}
  # Tolerations for chrome-node pods
  tolerations: []
  # Node selector for chrome-node pods
  nodeSelector: {}
  # Custom host aliases for chrome nodes
  hostAliases:
    # - ip: "198.51.100.0"
    #   hostnames:
    #     - "example.com"
    #     - "example.net"
    # - ip: "203.0.113.0"
    #   hostnames:
    #     - "example.org"
  # Custom environment variables for chrome nodes
  extraEnvironmentVariables:
    - name: SE_SESSION_REQUEST_TIMEOUT
      value: "5400"
    - name: SE_SESSION_RETRY_INTERVAL
      value: "15"
    - name: SE_NODE_SESSION_TIMEOUT
      value: "5400"
    - name: SE_START_VNC
      value: "false"
    #- name: SE_DRAIN_AFTER_SESSION_COUNT
    #  value: "1"  
    # - name: SE_JAVA_OPTS
    #   value: "-Xmx512m"
    # - name:
    #   valueFrom:
    #     secretKeyRef:
    #       name: secret-name
    #       key: secret-key

@VietND96
Copy link
Member

VietND96 commented Jan 9, 2024

If disable noVNC, I think it should be SE_START_NO_VNC

@GuillaumeFradet
Copy link
Author

Ok I have set it too but it still seems activated as you can see

`kubectl get scaledjob selenium-chrome-node -n selenium-grid -o yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
annotations:
helm.sh/hook: post-install,post-upgrade
creationTimestamp: "2024-01-10T06:48:04Z"
finalizers:

  • finalizer.keda.sh
    generation: 2
    labels:
    app: selenium-chrome-node
    app.kubernetes.io/component: selenium-grid-4.15.0-20231129
    app.kubernetes.io/instance: selenium-grid
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/name: selenium-chrome-node
    app.kubernetes.io/version: 4.15.0-20231129
    helm.sh/chart: selenium-grid-0.25.3
    name: selenium-chrome-node
    namespace: selenium-grid
    resourceVersion: "24239423042"
    uid: ab97994b-3271-4ada-bfe1-72ccd9151239
    spec:
    failedJobsHistoryLimit: 0
    jobTargetRef:
    backoffLimit: 0
    completions: 1
    parallelism: 1
    template:
    metadata:
    annotations:
    checksum/event-bus-configmap: 424bdd190f187b951ea19a9d9c8ae098984e27a9dc9a7006186ad02ee5233236
    creationTimestamp: null
    labels:
    app: selenium-chrome-node
    app.kubernetes.io/component: selenium-grid-4.15.0-20231129
    app.kubernetes.io/instance: selenium-grid
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/name: selenium-chrome-node
    app.kubernetes.io/version: 4.15.0-20231129
    helm.sh/chart: selenium-grid-0.25.3
    spec:
    containers:
    - env:
    - name: SE_SESSION_REQUEST_TIMEOUT
    value: "5400"
    - name: SE_SESSION_RETRY_INTERVAL
    value: "15"
    - name: SE_NODE_SESSION_TIMEOUT
    value: "5400"
    - name: SE_START_VNC
    value: "false"
    - name: SE_START_NO_VNC
    value: "false"
    envFrom:
    - configMapRef:
    name: selenium-event-bus-config
    - configMapRef:
    name: selenium-node-config
    image: selenium/node-chrome:4.16.0-20231206
    imagePullPolicy: IfNotPresent
    name: selenium-chrome-node
    ports:
    - containerPort: 5555
    protocol: TCP
    resources:
    limits:
    cpu: "1"
    memory: 1300Mi
    requests:
    cpu: "1"
    memory: 1300Mi
    volumeMounts:
    - mountPath: /dev/shm
    name: dshm
    restartPolicy: Never
    serviceAccount: selenium-serviceaccount
    serviceAccountName: selenium-serviceaccount
    terminationGracePeriodSeconds: 30
    volumes:
    - emptyDir:
    medium: Memory
    sizeLimit: 1300Mi
    name: dshm
    maxReplicaCount: 500
    minReplicaCount: 0
    pollingInterval: 10
    rollout: {}
    scalingStrategy:
    strategy: default
    successfulJobsHistoryLimit: 0
    triggers:
  • metadata:
    browserName: chrome
    unsafeSsl: "true"
    url: http://xxxxx:xxxxx@selenium-hub.selenium-grid:4444/graphql
    type: selenium-grid
    status:
    conditions:
  • message: ScaledJob is defined correctly and is ready to scaling
    reason: ScaledJobReady
    status: "True"
    type: Ready
  • message: Scaling is performed because triggers are active
    reason: ScalerActive
    status: "True"
    type: Active
  • status: Unknown
    type: Fallback
  • status: Unknown
    type: Paused
    `
    Capture d鈥櫭ヽran du 2024-01-10 07-58-31

@VietND96
Copy link
Member

Ah ok, misunderstood your requirement. Those 2 ENV are used to disable the process in containers only. For the Grid UI, e.g you want to disable the recorder button or prevent the user from accessing the live preview of a session, I guess it does not support. That feature needs to be implemented on the upstream repository. @diemol, correct me if any missing

@GuillaumeFradet
Copy link
Author

In fact I wanted to see if disabling it, would remove the error since it seems to come from NoVnc.Ok, I'll keep looking for another solution if it's not supported.

@diemol
Copy link
Member

diemol commented Jan 10, 2024

You need to disable SE_START_XVFB and then the video icon will not show up.

@GuillaumeFradet
Copy link
Author

Ok thanks, it does hide the camera preventing vision, but the browser still crashes after several minutes not finishing the process.

@diemol
Copy link
Member

diemol commented Jan 10, 2024

but the browser still crashes after several minutes not finishing the process.

What does this mean in detail? Can you describe this better please?

@VietND96
Copy link
Member

VietND96 commented Jan 10, 2024

I used nightly image tag to reproduce.
The error websock.js:231 WebSocket connection to 'wss://ci.ndviet.org/selenium/session/d84db2d3d1b2b67c0f6a2eadb13ebfea/se/vnc' failed: Close received after close could be seen in the first time opened and page is blank. Probably I enabled VNC_PASSWORD hence this flakiness comes, still checking.
Then I clicked the Close button and opened it again, it could connect successfully and the preview kept alive until the session was closed. I didn't see it closed after a short time
image
Can you try the nightly image also and confirm?

@GuillaumeFradet
Copy link
Author

Capture d鈥櫭ヽran du 2024-01-10 11-55-09
I launch my script which starts the navigation it goes on several pages, all goes well on the first ones then after a few minutes I have this result (as on the capture).My script is stopped and cannot even make a capture of the problem as the log of my script shows it.
Move to next URL...
Command error after processing: 4 minutes, 3 seconds
Screenshot failed
Failed to exit browser

I get the same result by setting the noVnc , vnc and start_xvfb options to false @diemol

Ok I'll try with the nightly @VietND96

@diemol
Copy link
Member

diemol commented Jan 10, 2024

Those flags enable or disable VNC.

Can you share the Grid log and the test log?

@GuillaumeFradet
Copy link
Author

GuillaumeFradet commented Jan 10, 2024

Here are the node logs for my last test:

2024-01-10 12:44:12,695 INFO Included extra file "/etc/supervisor/conf.d/selenium.conf" during parsing
2024-01-10 12:44:12,698 INFO RPC interface 'supervisor' initialized
2024-01-10 12:44:12,698 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2024-01-10 12:44:12,699 INFO supervisord started with pid 8
2024-01-10 12:44:13,703 INFO spawned: 'xvfb' with pid 9
2024-01-10 12:44:13,707 INFO spawned: 'vnc' with pid 10
2024-01-10 12:44:13,712 INFO spawned: 'novnc' with pid 11
2024-01-10 12:44:13,717 INFO spawned: 'selenium-node' with pid 14
2024-01-10 12:44:13,722 INFO success: selenium-node entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
Appending Selenium options: --session-timeout 5400
Generating Selenium Config
Configuring server...
Setting up SE_NODE_HOST...
Setting up SE_NODE_PORT...
Tracing is disabled
Selenium Grid Node configuration: 
[events]
publish = "tcp://selenium-hub:4442"
subscribe = "tcp://selenium-hub:4443"

[node]
grid-url = "http://xxxxx:xxxxx@selenium-hub.selenium-grid:4444"
session-timeout = "5400"
override-max-sessions = false
detect-drivers = false
drain-after-session-count = 1
max-sessions = 1

[[node.driver-configuration]]
display-name = "chrome"
stereotype = '{"browserName": "chrome", "browserVersion": "120.0", "platformName": "Linux", "goog:chromeOptions": {"binary": "/usr/bin/google-chrome"}}'
max-sessions = 1

Starting Selenium Grid Node...
2024-01-10 12:44:14,761 INFO success: xvfb entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-01-10 12:44:14,761 INFO success: vnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-01-10 12:44:14,761 INFO success: novnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
12:44:14.878 INFO [LoggingOptions.configureLogEncoding] - Using the system default encoding
12:44:14.883 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
12:44:15.081 INFO [UnboundZmqEventBus.<init>] - Connecting to tcp://selenium-hub:4442 and tcp://selenium-hub:4443
12:44:15.189 INFO [UnboundZmqEventBus.<init>] - Sockets created
12:44:16.191 INFO [UnboundZmqEventBus.<init>] - Event bus ready
12:44:16.293 INFO [NodeServer.createHandlers] - Reporting self as: http://100.64.48.104:5555
12:44:16.378 INFO [NodeOptions.getSessionFactories] - Detected 1 available processors
12:44:16.466 INFO [NodeOptions.report] - Adding chrome for {"browserName": "chrome","browserVersion": "120.0","goog:chromeOptions": {"binary": "\u002fusr\u002fbin\u002fgoogle-chrome"},"platformName": "linux","se:noVncPort": 7900,"se:vncEnabled": true} 1 times
12:44:16.483 INFO [Node.<init>] - Binding additional locator mechanisms: relative
12:44:16.704 INFO [NodeServer$1.start] - Starting registration process for Node http://100.64.48.104:5555
12:44:16.705 INFO [NodeServer.execute] - Started Selenium node 4.17.0-SNAPSHOT (revision 111086d): http://100.64.48.104:5555
12:44:16.713 INFO [NodeServer$1.lambda$start$1] - Sending registration event...
12:44:16.985 INFO [NodeServer.lambda$createHandlers$2] - Node has been added
12:44:18.566 INFO [LocalNode.checkSessionCount] - Draining Node, configured sessions value (1) has been reached.
12:44:18.574 INFO [LocalNode.newSession] - Session created by the Node. Id: 3d477976dc13edf1b0fc49b6987c3365, Caps: Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 120.0.6099.216, chrome: {chromedriverVersion: 120.0.6099.109 (3419140ab66..., userDataDir: /tmp/.org.chromium.Chromium...}, fedcm:accounts: true, goog:chromeOptions: {debuggerAddress: localhost:42579}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: linux, proxy: Proxy(), se:bidiEnabled: false, se:cdp: ws://admin:rmdscrap@seleniu..., se:cdpVersion: 120.0.6099.216, se:vnc: ws://admin:rmdscrap@seleniu..., se:vncEnabled: true, se:vncLocalAddress: ws://100.64.48.104:7900, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:extension:minPinLength: true, webauthn:extension:prf: true, webauthn:virtualAuthenticators: true}
12:44:23.972 INFO [ProxyNodeWebsockets.createWsEndPoint] - Establishing connection to ws://100.64.48.104:7900
12:44:27.398 INFO [ProxyNodeWebsockets.createWsEndPoint] - Establishing connection to ws://100.64.48.104:7900
12:44:30.828 INFO [ProxyNodeWebsockets.createWsEndPoint] - Establishing connection to ws://100.64.48.104:7900

An test log :
Starting command between "2024-01-17" and "2024-02-22" (36 days)
Browser session ID is 3d477976dc13edf1b0fc49b6987c3365
Day 1/36 (2024-01-17)
Wait for the results...
Results are here!
Gonna take the good result
Can take the good result
Day process time: 35 seconds
Day 2/36 (2024-01-18)
Wait for the results...
Results are here!
Gonna take the good result
Can take the good result
Day process time: 7 seconds
.....
Day 20/36 (2024-02-05)
Wait for the results...
Results are here!
Gonna take the good result
Can take the good result
Day process time: 1 minute, 47 seconds
Day 21/36 (2024-02-06)
Move to next day detail page URL...
Command error after processing: 6 minutes, 52 seconds
Screenshot failed
Failed to exit browser

@diemol
I'm doing some more tests on the nigthly version before I get back to you, but it seems to do the same thing.
@VietND96
I don't understand why, since last week it worked perfectly.

@diemol
Copy link
Member

diemol commented Jan 10, 2024

The Grid log seems incomplete.

@GuillaumeFradet
Copy link
Author

GuillaumeFradet commented Jan 10, 2024

Although it was the entire log of the pod containing the Chrome node, I have this coming from the pod containing the hub. The HTTP connect time out error is raised when the browser is cut off and the connection becomes impossible.

13:49:19.780 WARN [SeleniumSpanExporter$1.lambda$export$1] - Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
Build info: version: '4.17.0-SNAPSHOT', revision: '111086d'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'
Driver info: driver.version: unknown
13:49:19.780 WARN [SeleniumSpanExporter$1.lambda$export$3] - {"traceId": "48c27d204ea997d745b37e7ba962653a","eventTime": 1704894559778843957,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.TimeoutException: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:392)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$5(RetryRequest.java:81)\n\tat dev.failsafe.Functions.lambda$toCtxSupplier$11(Functions.java:243)\n\tat dev.failsafe.Functions.lambda$get$0(Functions.java:46)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.FallbackExecutor.lambda$apply$0(FallbackExecutor.java:51)\n\tat dev.failsafe.SyncExecutionImpl.executeSync(SyncExecutionImpl.java:187)\n\tat dev.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)\n\tat dev.failsafe.FailsafeExecutor.get(FailsafeExecutor.java:112)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$6(RetryRequest.java:81)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:358)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:54)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:90)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:181)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:383)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:87)\n\tat org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.security.BasicAuthenticationFilter.lambda$apply$0(BasicAuthenticationFilter.java:54)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:829)\nCaused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:512)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.getExceptionalCF(MultiExchange.java:459)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.lambda$responseAsyncImpl$7(MultiExchange.java:386)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2094)\n\tat java.net.http\u002fjdk.internal.net.http.Http1Exchange.lambda$cancelImpl$9(Http1Exchange.java:482)\n\t... 3 more\nCaused by: java.net.ConnectException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:513)\n\t... 10 more\n","exception.type": "org.openqa.selenium.TimeoutException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "195.154.74.229:4444","http.method": "POST","http.request_content_length": "72","http.scheme": "HTTP","http.target": "\u002fsession\u002f46544a19c5852c24b27e383b9ddc6329\u002felements","session.id": "46544a19c5852c24b27e383b9ddc6329"}}

13:49:49.817 WARN [SeleniumSpanExporter$1.lambda$export$1] - org.openqa.selenium.TimeoutException: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
Build info: version: '4.17.0-SNAPSHOT', revision: '111086d'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'
Driver info: driver.version: unknown
	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:392)
	at org.openqa.selenium.remote.http.RetryRequest.lambda$apply$5(RetryRequest.java:81)
	at dev.failsafe.Functions.lambda$toCtxSupplier$11(Functions.java:243)
	at dev.failsafe.Functions.lambda$get$0(Functions.java:46)
	at dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)
	at dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)
	at dev.failsafe.internal.FallbackExecutor.lambda$apply$0(FallbackExecutor.java:51)
	at dev.failsafe.SyncExecutionImpl.executeSync(SyncExecutionImpl.java:187)
	at dev.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)
	at dev.failsafe.FailsafeExecutor.get(FailsafeExecutor.java:112)
	at org.openqa.selenium.remote.http.RetryRequest.lambda$apply$6(RetryRequest.java:81)
	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:358)
	at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:54)
	at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:90)
	at org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:181)
	at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:383)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.grid.router.Router.execute(Router.java:87)
	at org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.grid.security.BasicAuthenticationFilter.lambda$apply$0(BasicAuthenticationFilter.java:54)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
	at java.net.http/jdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:512)
	at java.net.http/jdk.internal.net.http.MultiExchange.getExceptionalCF(MultiExchange.java:459)
	at java.net.http/jdk.internal.net.http.MultiExchange.lambda$responseAsyncImpl$7(MultiExchange.java:386)
	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
	at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2094)
	at java.net.http/jdk.internal.net.http.Http1Exchange.lambda$cancelImpl$9(Http1Exchange.java:482)
	... 3 more
Caused by: java.net.ConnectException: HTTP connect timed out
	at java.net.http/jdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:513)
	... 10 more

13:49:49.817 WARN [SeleniumSpanExporter$1.lambda$export$1] - Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
Build info: version: '4.17.0-SNAPSHOT', revision: '111086d'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'
Driver info: driver.version: unknown
13:49:49.817 WARN [SeleniumSpanExporter$1.lambda$export$3] - {"traceId": "b73792621e3f48baf63789f7a0077dca","eventTime": 1704894589816912064,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.TimeoutException: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:392)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$5(RetryRequest.java:81)\n\tat dev.failsafe.Functions.lambda$toCtxSupplier$11(Functions.java:243)\n\tat dev.failsafe.Functions.lambda$get$0(Functions.java:46)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.FallbackExecutor.lambda$apply$0(FallbackExecutor.java:51)\n\tat dev.failsafe.SyncExecutionImpl.executeSync(SyncExecutionImpl.java:187)\n\tat dev.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)\n\tat dev.failsafe.FailsafeExecutor.get(FailsafeExecutor.java:112)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$6(RetryRequest.java:81)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:358)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:54)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:90)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:181)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:383)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:87)\n\tat org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.security.BasicAuthenticationFilter.lambda$apply$0(BasicAuthenticationFilter.java:54)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:829)\nCaused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:512)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.getExceptionalCF(MultiExchange.java:459)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.lambda$responseAsyncImpl$7(MultiExchange.java:386)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2094)\n\tat java.net.http\u002fjdk.internal.net.http.Http1Exchange.lambda$cancelImpl$9(Http1Exchange.java:482)\n\t... 3 more\nCaused by: java.net.ConnectException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:513)\n\t... 10 more\n","exception.type": "org.openqa.selenium.TimeoutException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "195.154.74.229:4444","http.method": "POST","http.request_content_length": "698","http.scheme": "HTTP","http.target": "\u002fsession\u002f46544a19c5852c24b27e383b9ddc6329\u002furl","session.id": "46544a19c5852c24b27e383b9ddc6329"}}

13:50:19.856 WARN [SeleniumSpanExporter$1.lambda$export$1] - org.openqa.selenium.TimeoutException: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
Build info: version: '4.17.0-SNAPSHOT', revision: '111086d'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'
Driver info: driver.version: unknown
	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:392)
	at org.openqa.selenium.remote.http.RetryRequest.lambda$apply$5(RetryRequest.java:81)
	at dev.failsafe.Functions.lambda$toCtxSupplier$11(Functions.java:243)
	at dev.failsafe.Functions.lambda$get$0(Functions.java:46)
	at dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)
	at dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)
	at dev.failsafe.internal.FallbackExecutor.lambda$apply$0(FallbackExecutor.java:51)
	at dev.failsafe.SyncExecutionImpl.executeSync(SyncExecutionImpl.java:187)
	at dev.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)
	at dev.failsafe.FailsafeExecutor.get(FailsafeExecutor.java:112)
	at org.openqa.selenium.remote.http.RetryRequest.lambda$apply$6(RetryRequest.java:81)
	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:358)
	at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:54)
	at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:90)
	at org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:181)
	at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:383)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.grid.router.Router.execute(Router.java:87)
	at org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.grid.security.BasicAuthenticationFilter.lambda$apply$0(BasicAuthenticationFilter.java:54)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
	at java.net.http/jdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:512)
	at java.net.http/jdk.internal.net.http.MultiExchange.getExceptionalCF(MultiExchange.java:459)
	at java.net.http/jdk.internal.net.http.MultiExchange.lambda$responseAsyncImpl$7(MultiExchange.java:386)
	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
	at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2094)
	at java.net.http/jdk.internal.net.http.Http1Exchange.lambda$cancelImpl$9(Http1Exchange.java:482)
	... 3 more
Caused by: java.net.ConnectException: HTTP connect timed out
	at java.net.http/jdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:513)
	... 10 more

13:50:19.856 WARN [SeleniumSpanExporter$1.lambda$export$1] - Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
Build info: version: '4.17.0-SNAPSHOT', revision: '111086d'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'
Driver info: driver.version: unknown
13:50:19.856 WARN [SeleniumSpanExporter$1.lambda$export$3] - {"traceId": "84bf58116ba776f6b5ebc71503539fe6","eventTime": 1704894619855159595,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.TimeoutException: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:392)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$5(RetryRequest.java:81)\n\tat dev.failsafe.Functions.lambda$toCtxSupplier$11(Functions.java:243)\n\tat dev.failsafe.Functions.lambda$get$0(Functions.java:46)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.FallbackExecutor.lambda$apply$0(FallbackExecutor.java:51)\n\tat dev.failsafe.SyncExecutionImpl.executeSync(SyncExecutionImpl.java:187)\n\tat dev.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)\n\tat dev.failsafe.FailsafeExecutor.get(FailsafeExecutor.java:112)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$6(RetryRequest.java:81)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:358)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:54)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:90)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:181)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:383)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:87)\n\tat org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.security.BasicAuthenticationFilter.lambda$apply$0(BasicAuthenticationFilter.java:54)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:829)\nCaused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:512)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.getExceptionalCF(MultiExchange.java:459)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.lambda$responseAsyncImpl$7(MultiExchange.java:386)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2094)\n\tat java.net.http\u002fjdk.internal.net.http.Http1Exchange.lambda$cancelImpl$9(Http1Exchange.java:482)\n\t... 3 more\nCaused by: java.net.ConnectException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:513)\n\t... 10 more\n","exception.type": "org.openqa.selenium.TimeoutException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "195.154.74.229:4444","http.method": "GET","http.request_content_length": "0","http.scheme": "HTTP","http.target": "\u002fsession\u002f46544a19c5852c24b27e383b9ddc6329\u002fscreenshot","session.id": "46544a19c5852c24b27e383b9ddc6329"}}

13:50:49.894 WARN [SeleniumSpanExporter$1.lambda$export$1] - org.openqa.selenium.TimeoutException: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
Build info: version: '4.17.0-SNAPSHOT', revision: '111086d'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'
Driver info: driver.version: unknown
	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:392)
	at org.openqa.selenium.remote.http.RetryRequest.lambda$apply$5(RetryRequest.java:81)
	at dev.failsafe.Functions.lambda$toCtxSupplier$11(Functions.java:243)
	at dev.failsafe.Functions.lambda$get$0(Functions.java:46)
	at dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)
	at dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)
	at dev.failsafe.internal.FallbackExecutor.lambda$apply$0(FallbackExecutor.java:51)
	at dev.failsafe.SyncExecutionImpl.executeSync(SyncExecutionImpl.java:187)
	at dev.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)
	at dev.failsafe.FailsafeExecutor.get(FailsafeExecutor.java:112)
	at org.openqa.selenium.remote.http.RetryRequest.lambda$apply$6(RetryRequest.java:81)
	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:358)
	at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:54)
	at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:90)
	at org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:181)
	at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:383)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.grid.router.Router.execute(Router.java:87)
	at org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.grid.security.BasicAuthenticationFilter.lambda$apply$0(BasicAuthenticationFilter.java:54)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
	at org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
	at org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
	at java.net.http/jdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:512)
	at java.net.http/jdk.internal.net.http.MultiExchange.getExceptionalCF(MultiExchange.java:459)
	at java.net.http/jdk.internal.net.http.MultiExchange.lambda$responseAsyncImpl$7(MultiExchange.java:386)
	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
	at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2094)
	at java.net.http/jdk.internal.net.http.Http1Exchange.lambda$cancelImpl$9(Http1Exchange.java:482)
	... 3 more
Caused by: java.net.ConnectException: HTTP connect timed out
	at java.net.http/jdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:513)
	... 10 more

13:50:49.894 WARN [SeleniumSpanExporter$1.lambda$export$1] - Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out
Build info: version: '4.17.0-SNAPSHOT', revision: '111086d'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'
Driver info: driver.version: unknown
13:50:49.895 WARN [SeleniumSpanExporter$1.lambda$export$3] - {"traceId": "2445c2225c8be21080ddec9cb39ae8f1","eventTime": 1704894649893604164,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.TimeoutException: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\nBuild info: version: '4.17.0-SNAPSHOT', revision: '111086d'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '11.0.21'\nDriver info: driver.version: unknown\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:392)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$5(RetryRequest.java:81)\n\tat dev.failsafe.Functions.lambda$toCtxSupplier$11(Functions.java:243)\n\tat dev.failsafe.Functions.lambda$get$0(Functions.java:46)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.RetryPolicyExecutor.lambda$apply$0(RetryPolicyExecutor.java:74)\n\tat dev.failsafe.internal.FallbackExecutor.lambda$apply$0(FallbackExecutor.java:51)\n\tat dev.failsafe.SyncExecutionImpl.executeSync(SyncExecutionImpl.java:187)\n\tat dev.failsafe.FailsafeExecutor.call(FailsafeExecutor.java:376)\n\tat dev.failsafe.FailsafeExecutor.get(FailsafeExecutor.java:112)\n\tat org.openqa.selenium.remote.http.RetryRequest.lambda$apply$6(RetryRequest.java:81)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:358)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:54)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:90)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:181)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:383)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:87)\n\tat org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.security.BasicAuthenticationFilter.lambda$apply$0(BasicAuthenticationFilter.java:54)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:346)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:829)\nCaused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:512)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.getExceptionalCF(MultiExchange.java:459)\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.lambda$responseAsyncImpl$7(MultiExchange.java:386)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2094)\n\tat java.net.http\u002fjdk.internal.net.http.Http1Exchange.lambda$cancelImpl$9(Http1Exchange.java:482)\n\t... 3 more\nCaused by: java.net.ConnectException: HTTP connect timed out\n\tat java.net.http\u002fjdk.internal.net.http.MultiExchange.toTimeoutException(MultiExchange.java:513)\n\t... 10 more\n","exception.type": "org.openqa.selenium.TimeoutException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "195.154.74.229:4444","http.method": "DELETE","http.request_content_length": "0","http.scheme": "HTTP","http.target": "\u002fsession\u002f46544a19c5852c24b27e383b9ddc6329","session.id": "46544a19c5852c24b27e383b9ddc6329"}}

13:53:21.750 INFO [GridModel.purgeDeadNodes] - Removing Node http://100.64.48.173:5555, DOWN for too long

@diemol
Copy link
Member

diemol commented Jan 10, 2024

Looks like a command is timing out, but it is not clear as the log from the Node is incomplete.

You said that this was working fine before, which version were you using?

@GuillaumeFradet
Copy link
Author

I have 3 clusters, 2 are on version 4.11.0-20230801 and 1 on version 4.16.1-20231212. Right now, I'm running tests on the nightly version.

Here's another log from one of my last tests for the chrome node
kubectl logs selenium-chrome-node-b87vv-lkpf6 -n selenium-grid > chromeNode.log :
`2024-01-10 14:12:43,201 INFO Included extra file "/etc/supervisor/conf.d/selenium.conf" during parsing
2024-01-10 14:12:43,203 INFO RPC interface 'supervisor' initialized
2024-01-10 14:12:43,203 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2024-01-10 14:12:43,203 INFO supervisord started with pid 9
2024-01-10 14:12:44,208 INFO spawned: 'xvfb' with pid 10
2024-01-10 14:12:44,214 INFO spawned: 'vnc' with pid 11
2024-01-10 14:12:44,221 INFO spawned: 'novnc' with pid 17
2024-01-10 14:12:44,228 INFO spawned: 'selenium-node' with pid 24
2024-01-10 14:12:44,231 INFO success: selenium-node entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
Appending Selenium options: --session-timeout 5400
Generating Selenium Config
Configuring server...
Setting up SE_NODE_HOST...
Setting up SE_NODE_PORT...
Tracing is disabled
Selenium Grid Node configuration:
[events]
publish = "tcp://selenium-hub:4442"
subscribe = "tcp://selenium-hub:4443"

[node]
grid-url = "http://xxxx:xxxxx@selenium-hub.selenium-grid:4444"
session-timeout = "5400"
override-max-sessions = false
detect-drivers = false
drain-after-session-count = 1
max-sessions = 1

[[node.driver-configuration]]
display-name = "chrome"
stereotype = '{"browserName": "chrome", "browserVersion": "120.0", "platformName": "Linux", "goog:chromeOptions": {"binary": "/usr/bin/google-chrome"}}'
max-sessions = 1

Starting Selenium Grid Node...
2024-01-10 14:12:45,268 INFO success: xvfb entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-01-10 14:12:45,269 INFO success: vnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-01-10 14:12:45,269 INFO success: novnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
14:12:45.482 INFO [LoggingOptions.configureLogEncoding] - Using the system default encoding
14:12:45.487 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
14:12:45.692 INFO [UnboundZmqEventBus.] - Connecting to tcp://selenium-hub:4442 and tcp://selenium-hub:4443
14:12:45.789 INFO [UnboundZmqEventBus.] - Sockets created
14:12:46.791 INFO [UnboundZmqEventBus.] - Event bus ready
14:12:46.977 INFO [NodeServer.createHandlers] - Reporting self as: http://100.64.48.237:5555
14:12:46.996 INFO [NodeOptions.getSessionFactories] - Detected 1 available processors
14:12:47.080 INFO [NodeOptions.report] - Adding chrome for {"browserName": "chrome","browserVersion": "120.0","goog:chromeOptions": {"binary": "\u002fusr\u002fbin\u002fgoogle-chrome"},"platformName": "linux","se:noVncPort": 7900,"se:vncEnabled": true} 1 times
14:12:47.098 INFO [Node.] - Binding additional locator mechanisms: relative
14:12:47.303 INFO [NodeServer$1.start] - Starting registration process for Node http://100.64.48.237:5555
14:12:47.304 INFO [NodeServer.execute] - Started Selenium node 4.17.0-SNAPSHOT (revision 111086d): http://100.64.48.237:5555
14:12:47.360 INFO [NodeServer$1.lambda$start$1] - Sending registration event...
14:12:47.587 INFO [NodeServer.lambda$createHandlers$2] - Node has been added
14:15:42.186 INFO [LocalNode.checkSessionCount] - Draining Node, configured sessions value (1) has been reached.
14:15:42.191 INFO [LocalNode.newSession] - Session created by the Node. Id: 35d4d29d3a0da345356d30fadc4661fa, Caps: Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 120.0.6099.216, chrome: {chromedriverVersion: 120.0.6099.109 (3419140ab66..., userDataDir: /tmp/.org.chromium.Chromium...}, fedcm:accounts: true, goog:chromeOptions: {debuggerAddress: localhost:35349}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: linux, proxy: Proxy(), se:bidiEnabled: false, se:cdp: ws://admin:rmdscrap@seleniu..., se:cdpVersion: 120.0.6099.216, se:vnc: ws://admin:rmdscrap@seleniu..., se:vncEnabled: true, se:vncLocalAddress: ws://100.64.48.237:7900, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:extension:minPinLength: true, webauthn:extension:prf: true, webauthn:virtualAuthenticators: true}
`

@diemol
Copy link
Member

diemol commented Jan 10, 2024

My question is if things are still working with the previous version and when did it stop working?

@GuillaumeFradet
Copy link
Author

It doesn't work with either 4.11 or 4.16 since monday. It was working the previous friday

@diemol
Copy link
Member

diemol commented Jan 10, 2024

OK, so if it is not working with 4.11, which was the previous version, and the Selenium components have not changed since then... what is your reasoning for this as a Selenium issue? Have you tried to troubleshoot your test and your system under test?

@GuillaumeFradet
Copy link
Author

Because I haven't changed anything between Friday and Monday, neither in the code nor in the test, and now the bug occurs when the grid window turns white, which didn't happen before.

@diemol
Copy link
Member

diemol commented Jan 10, 2024

The Grid window turns white on 4.11 as well?

@GuillaumeFradet
Copy link
Author

GuillaumeFradet commented Jan 10, 2024

Capture d鈥櫭ヽran du 2024-01-10 15-51-54

Yes, the same as you can see here, it's on version 4.11 with a Chrome v115 everytime its between 5 and 8 minutes

@diemol
Copy link
Member

diemol commented Jan 10, 2024

OK, 4.11 has not changed, as we do not patch old versions. You need to check and trace what changes might have happened in your environment.

@VietND96
Copy link
Member

12:44:23.972 INFO [ProxyNodeWebsockets.createWsEndPoint] - Establishing connection to ws://100.64.48.104:7900
12:44:27.398 INFO [ProxyNodeWebsockets.createWsEndPoint] - Establishing connection to ws://100.64.48.104:7900
12:44:30.828 INFO [ProxyNodeWebsockets.createWsEndPoint] - Establishing connection to ws://100.64.48.104:7900

This message will show when the live preview is opened on UI. It would be the IP of Node pod.

It doesn't work with either 4.11 or 4.16 since monday. It was working the previous Friday

In this case, can you check in the cluster, is there any e.g network policy applied in between that could drop the connection?

@GuillaumeFradet
Copy link
Author

As I continued searching, I found out that my problem was coming from the RAM.
The session was using between 1.50 and 2GB of RAM while the limit was set to 1.3GB.
By modifying it this way, the browser continues to work, as the RAM limit is not reached. I am looking into how to reduce RAM usage.
Fix:
resources:
requests:
memory: "2500Mi" // before was 1300Mi
cpu: "1"
limits:
memory: "2500Mi" // before was 1300Mi
cpu: "1"

@VietND96
Copy link
Member

@GuillaumeFradet, is that fine in recent versions with the increase resource requests/limits?

@GuillaumeFradet
Copy link
Author

@VietND96 I am still on 4.16 where indeed I no longer have this issue since increasing the resources. I had quickly tested 4.18 where I did not encounter the problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants