profile
viewpoint
François Reynaud freynaud Element34 Solutions GmbH Altendorf, Switzerland Engineer @ element34

freynaud/grid-plugin-tutorial 19

howto create a grid plugin

freynaud/ios-driver 9

Selenium server to test native, hybrid and web apps on IOS. Join us on IRC #ios-driver on freenode

freynaud/grid-spine-selenium 6

selenium specific logic for the EU eBay grid.

freynaud/grid-spine-common 5

grid common used by eBay EU QE.

freynaud/GridDemoProxy 2

How to extend Selenium Grid 2.0 - tutrorial

freynaud/MacOSNativeEvent 2

MacOSNativeEvent for webdriver.

freynaud/demo 1

grid demo for selenium conference

issue commentmozilla/geckodriver

Memory leak in Marionette commands that call the frame script

Was anyone able to check that? If not I'm going to close this issue by early next week. Thanks.

aplicacionamedida

comment created time in 6 minutes

issue commentmozilla/geckodriver

Geckodriver 0.28.0 cannot start Firefox on Android

@bclary would you mind filing a bug for geckodriver so we can better auto-detect the case from Peter? Not sure which exact path have have to take care about here.

@soulgalore interesting. We should get the docs fixed. But anyway which options do you use at all? When I use -android-storage the binary complains about an inappropriate option.

soulgalore

comment created time in 7 minutes

issue commentmozilla/geckodriver

"this.curBrowser.messageManager is null" since Firefox 82

Can you please check with a recent Firefox 84 beta? That problem should no longer exist given that we rewrote most of the underlying code.

phoenix384

comment created time in 13 minutes

issue commentmozilla/geckodriver

Firefox selenium 有几率不能获得预期结果,但是用chrome selenium 100%行。Firefox cannot get the Expected result

No log file has been received. As already said please attach it here.

ewwerpm

comment created time in 17 minutes

issue commentmozilla/geckodriver

Hanging HTTP request when deleting session

Could you please attach a trace-level log from geckodriver? Read more about reporting actionable bugs in our contribution guidelines.

vovka3003

comment created time in 20 minutes

issue commentmozilla/geckodriver

"TypeError: can't access dead object" if the frame is removed from under us

@jackblk please file a new issue for that, and please attach a trace log and if possible a minimized test case. Thanks.

barancev

comment created time in 22 minutes

Pull request review commentSeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

+---+title: "Observability"+weight: 2+---++## Table of Contents+ - [Selenium Grid](#selenium-grid)+ - [Observability](#observability)+	 - [Distributed tracing](#distributed-tracing) 	+	 -  [Event logging](#event-logging)+  - [Grid Observability](#grid-observability)+	  - [Visualizing Traces](#visualizing-traces)+	  - [Leveraging event logs](#leveraging-event-logs)+  - [References](#references)++## Selenium Grid++Grid aids in scaling and distributing tests by executing tests on various browser and operating system combinations.++## Observability++Observability has three pillars: traces, metrics and logs. Since Selenium Grid 4 is designed to be fully distributed, observability will make it easier to understand and debug the internals. ++## Distributed tracing+A single request or transaction spans multiple services and components.  Tracing tracks the request lifecycle as each service executes the request. It is useful in debugging in an error scenario.+Some key terms used in tracing context are: ++**Trace**+Tracing allows tracing a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.++**Span**+Each trace is made up of timed operations called spans. A span has a start and end time and it represents operations done by a service. The granularity of span depends on how it is instrumented. Each span has a unique identifier.  All spans within a trace have the same trace id.++**Span Attributes**+Span attributes are key-value pairs which provide additional information about each span.++**Events**+Events are timed-stamped logs within a span. They provide additional context to the existing spans. Events also contain key-value pairs as event attributes.++## Event logging++Logging is essential to debug an application. Logging is often done in a human-readable format. But for machines to search and analyze the logs, it has to have a well-defined format. Structured logging is a common practice of recording logs consistently in a fixed format. It commonly contains fields like:+ * Timestamp+ * Logging level+ * Logger class+ * Log message (This is further broken down into fields relevant to the operation where the log was recorded)++Logs and events are closely related. Events encapsulate all the possible information available to do a single unit of work. Logs are essentially subsets of an event. At the crux, both aid in debugging.+Refer following resources for detailed understanding:+ 1. [https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/](https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/)+ 2. [https://charity.wtf/2019/02/05/logs-vs-structured-events/](https://charity.wtf/2019/02/05/logs-vs-structured-events/)++## Grid Observability++Selenium server is instrumented with tracing using OpenTelemetry. Every request to the server is traced from start to end. Each trace consists of a series of spans as a request is executed within the server. +Most spans in the Selenium server consist of two events:+1. Normal event - records all information about a unit of work and marks successful completion of the work.+2. Error event - records all information till the error occurs and then records the error information. Marks an exception event.++Running Selenium server + 1. [Standalone](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#standalone-mode)+ 2. [Hub and Node](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#hub-and-node)+ 3. [Fully Distributed](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#fully-distributed)+ 4. [Docker](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#using-docker)++## Visualizing Traces+All spans, events and their respective attributes are part of a trace. Tracing works while running the server in all of the above-mentioned modes.++By default, tracing is enabled in the Selenium server. Selenium server exports the traces via two exporters:+1. Console - Logs all traces and their included spans at FINE level. By default, Selenium server prints logs at INFO level and above. As per need, this can be changed via [LoggingOptions.java](https://github.com/SeleniumHQ/selenium/blob/738dd0ee18a142d3fe69fc5f16889ac770188c93/java/server/src/org/openqa/selenium/grid/log/LoggingOptions.java). Add a line `logger.setLevel(Level.FINE);` Pick a logging level of choice.+2. Jaeger UI - OpenTelemetry provides the APIs and SDKs to instrument traces in the code. Whereas Jaeger is a tracing backend, that aids in collecting the tracing telemetry data and providing querying, filtering and visualizing features for the data.++[Detailed instructions of visualizing traces using Jaeger UI](https://github.com/SeleniumHQ/selenium/blob/a28b4beeeed965a352025a09f26fe2a9567cdeb3/java/server/src/org/openqa/selenium/grid/commands/tracing.txt)

Maybe reference the selenium info tracing command? That'll be up-to-date with the version of selenium that someone is using.

pujagani

comment created time in 24 minutes

Pull request review commentSeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

+---+title: "Observability"+weight: 2+---++## Table of Contents+ - [Selenium Grid](#selenium-grid)+ - [Observability](#observability)+	 - [Distributed tracing](#distributed-tracing) 	+	 -  [Event logging](#event-logging)+  - [Grid Observability](#grid-observability)+	  - [Visualizing Traces](#visualizing-traces)+	  - [Leveraging event logs](#leveraging-event-logs)+  - [References](#references)++## Selenium Grid++Grid aids in scaling and distributing tests by executing tests on various browser and operating system combinations.++## Observability++Observability has three pillars: traces, metrics and logs. Since Selenium Grid 4 is designed to be fully distributed, observability will make it easier to understand and debug the internals. ++## Distributed tracing+A single request or transaction spans multiple services and components.  Tracing tracks the request lifecycle as each service executes the request. It is useful in debugging in an error scenario.+Some key terms used in tracing context are: ++**Trace**+Tracing allows tracing a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.++**Span**+Each trace is made up of timed operations called spans. A span has a start and end time and it represents operations done by a service. The granularity of span depends on how it is instrumented. Each span has a unique identifier.  All spans within a trace have the same trace id.++**Span Attributes**+Span attributes are key-value pairs which provide additional information about each span.++**Events**+Events are timed-stamped logs within a span. They provide additional context to the existing spans. Events also contain key-value pairs as event attributes.++## Event logging++Logging is essential to debug an application. Logging is often done in a human-readable format. But for machines to search and analyze the logs, it has to have a well-defined format. Structured logging is a common practice of recording logs consistently in a fixed format. It commonly contains fields like:+ * Timestamp+ * Logging level+ * Logger class+ * Log message (This is further broken down into fields relevant to the operation where the log was recorded)++Logs and events are closely related. Events encapsulate all the possible information available to do a single unit of work. Logs are essentially subsets of an event. At the crux, both aid in debugging.+Refer following resources for detailed understanding:+ 1. [https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/](https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/)+ 2. [https://charity.wtf/2019/02/05/logs-vs-structured-events/](https://charity.wtf/2019/02/05/logs-vs-structured-events/)++## Grid Observability++Selenium server is instrumented with tracing using OpenTelemetry. Every request to the server is traced from start to end. Each trace consists of a series of spans as a request is executed within the server. +Most spans in the Selenium server consist of two events:+1. Normal event - records all information about a unit of work and marks successful completion of the work.+2. Error event - records all information till the error occurs and then records the error information. Marks an exception event.++Running Selenium server + 1. [Standalone](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#standalone-mode)+ 2. [Hub and Node](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#hub-and-node)+ 3. [Fully Distributed](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#fully-distributed)+ 4. [Docker](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#using-docker)++## Visualizing Traces+All spans, events and their respective attributes are part of a trace. Tracing works while running the server in all of the above-mentioned modes.++By default, tracing is enabled in the Selenium server. Selenium server exports the traces via two exporters:+1. Console - Logs all traces and their included spans at FINE level. By default, Selenium server prints logs at INFO level and above. As per need, this can be changed via [LoggingOptions.java](https://github.com/SeleniumHQ/selenium/blob/738dd0ee18a142d3fe69fc5f16889ac770188c93/java/server/src/org/openqa/selenium/grid/log/LoggingOptions.java). Add a line `logger.setLevel(Level.FINE);` Pick a logging level of choice.+2. Jaeger UI - OpenTelemetry provides the APIs and SDKs to instrument traces in the code. Whereas Jaeger is a tracing backend, that aids in collecting the tracing telemetry data and providing querying, filtering and visualizing features for the data.

Strictly speaking, folks need to add the Jaegar jars to the classpath themselves

pujagani

comment created time in 25 minutes

issue commentswagger-api/swagger-ui

Encoding attribute is not respected on the request

Is there a workaround?

alejandrofloresm

comment created time in 28 minutes

push eventSeleniumHQ/seleniumhq.github.io

Selenium CI Bot

commit sha eaaf55bc90b9e3b5c9cca23b003d0c5066d7728e

German locating elements (#559)[deploy site] * german translation location elements * german translation of locating elements * Auto stash before rebase of "upstream/dev" Co-authored-by: JS31096 <12621691+JS31096@users.noreply.github.com> ec5c003e94c17b0d30357dfacb039acfebf9cd13

view details

push time in 36 minutes

push eventSeleniumHQ/seleniumhq.github.io

Boris Wrubel

commit sha ec5c003e94c17b0d30357dfacb039acfebf9cd13

German locating elements (#559)[deploy site] * german translation location elements * german translation of locating elements * Auto stash before rebase of "upstream/dev" Co-authored-by: JS31096 <12621691+JS31096@users.noreply.github.com>

view details

push time in 39 minutes

PR merged SeleniumHQ/seleniumhq.github.io

German locating elements

Description

german translation for locating elements

Motivation and Context

to complete german translation

Types of changes

  • [ ] Change to the site (I am attaching a screenshot showing the before and after)
  • [ ] Code example added (and I also added the example to all translated languages)
  • [ ] Improved translation
  • [x] Added new translation (and I also added a notice to each document missing translation)

Checklist

  • [x] I have read the contributing document.
  • [x] I have used hugo to render the site/docs locally and I am sure it works.
+120 -125

0 comment

1 changed file

boris779

pr closed time in 39 minutes

create barnchSeleniumHQ/selenium

branch : rb-gha

created branch time in 40 minutes

issue openedmozilla/geckodriver

"this.curBrowser.messageManager is null" since Firefox 82

System

  • Version: 0.28
  • Platform: Windows 10 / Ubuntu 20.04
  • Firefox: 82 + 83
  • Selenium: 3.141.59

Testcase

When trying to find an element in a window that has closed, Firefox <82 threw a NoSuchWindowException. Since v82 it is a WebDriverException "TypeError: this.curBrowser.messageManager is null". The NoSuchWindowException was more understandable and could easily be handled if needed. The current error message looks like there might be something else wrong.

Stacktrace

org.openqa.selenium.WebDriverException: TypeError: this.curBrowser.messageManager is null Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: 'vmqa-jenkins', ip: '10.13.141.231', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-122-generic', java.version: '11.0.9.1' Driver info: org.openqa.selenium.remote.RemoteWebDriver Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 83.0, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID: 20201112153044, moz:geckodriverVersion: 0.28.0, moz:headless: false, moz:processID: 1692832, moz:profile: /tmp/rust_mozprofilef0EXOn, moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, platformVersion: 5.4.0-54-generic, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: ignore, webdriver.remote.sessionid: 1039ec24-1b47-49fa-9cda-2f2...} Session ID: 1039ec24-1b47-49fa-9cda-2f2314a36813 *** Element info: {Using=css selector, value=#globalBackgroundTransparent} at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323) at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:420) at org.openqa.selenium.By$ByCssSelector.findElement(By.java:431) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)

created time in an hour

issue openedSeleniumHQ/selenium

Selenium Server ignores Firefox profile settings for auto selecting SSL client certificate

🐛 Bug Report

Based on the relevant Firefox documentation and related posts found online, one (at least) of the following approaches is expected to propagate/create a Firefox profile configured to automatically select a client SSL certificate when running a selenium script against a remote Selenium Server node instance.

<!-- NOTE FIREFOX 48+ IS ONLY COMPATIBLE WITH GECKODRIVER.

If the issue is with Google Chrome consider logging an issue with chromedriver instead: https://chromedriver.chromium.org/help

If the issue is with Firefox GeckoDriver (aka Marionette) consider logging an issue with Mozilla: https://bugzilla.mozilla.org/buglist.cgi?product=Testing&component=Marionette

If the issue is with Microsoft Edge consider logging an issue with Microsoft instead: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/

If the issue is with Safari, only Safari 10+ is supported. Please log any Safari issue with Apple: https://bugreport.apple.com/

-->

To Reproduce

Detailed steps to reproduce the behavior:

Firefox certificate configuration

  1. Open Firefox on the local machine
  2. Check the current profile name by navigating to about:profiles. Let's name the current profile automation.
  3. Open a tab to about:preferences#privacy
  4. Go to the Certificates section
  5. Check Select one automatically
  6. Uncheck Query OCSP responder...
  7. Select View Certificates...
  8. Import your client SSL certificate under Your Certificates
  9. Navigate to the URL that requires the cert.

Selenium Server node

Note: In the following test setup both the hub and node are local, but the same configuration was tested on a distributed system as well.

Create a nodeConfig.json file for the Selenium Server node and configure the capabilities object with the profile/certificate settings:

{
  "capabilities":
  [
    {
      "browserName": "firefox",
      "platform": "MAC",
      "maxInstances": 2,
      "acceptSslCerts": true,	
      "firefox_profile": "automation",
      "cleanSession": true
    }
  ],

Run the node instance with:

java -Dwebdriver.firefox.profile=automation -Dwebdriver.firefox.acceptSslCerts=true -jar selenium-server-standalone-3.141.59.jar -role node -port 4445 -hub http://localhost:4444

or pointing the above config file:

java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig nodeConfig.json

Node.js script

    var fs = require('fs');
    var encodedProfile = fs
        .readFileSync('/Users/MyUser/Library/Application\ Support/Firefox/Profiles/6pst39om.automation.zip')
        .toString('base64');
    const serverUrl = 'http://localhost:4444'; // Selenium Server hub
    const options = new firefox.Options()
        .setPreference('profile', encodedProfile)
        .setAcceptInsecureCerts(true)
        .setPreference("security.default_personal_cert", "Select Automatically")
    const builder = new Builder();
    return builder
        .usingServer(serverUrl)
        .withCapabilities(Capabilities.firefox()
            .setPlatform('mac')
        )
        .setFirefoxOptions(options)
        .build();

NOTE 6pst39om.automation.zip contains the zipped 6pst39om.automation profile folder. I've tried both compressing the entire folder or just its content.

Expected behavior

The test selenium script above should be able to open Firefox and navigate to the URL that requires the pre-configured client certificate, without requesting any user interaction.

Test script or set of commands reproducing this issue

The test selenium script opens Firefox and navigates to the protected URL, but the server returns an access denied error.

Environment

OS: macOS Mojave 10.14.6 Browser: Firefox Browser version: 83.0 (64-bit) Browser Driver version: GeckoDriver 0.28.0 Language Bindings version: NodeJS 4.0.0-alpha.7 Selenium Grid version (if applicable): 3.141.59

created time in 2 hours

PR opened SeleniumHQ/seleniumhq.github.io

German locating elements

Description

german translation for locating elements

Motivation and Context

to complete german translation

Types of changes

  • [ ] Change to the site (I am attaching a screenshot showing the before and after)
  • [ ] Code example added (and I also added the example to all translated languages)
  • [ ] Improved translation
  • [x] Added new translation (and I also added a notice to each document missing translation)

Checklist

  • [x] I have read the contributing document.
  • [x] I have used hugo to render the site/docs locally and I am sure it works.
+120 -125

0 comment

1 changed file

pr created time in 2 hours

Pull request review commentSeleniumHQ/selenium

Add print page command

 def minimize_window(self):         """         self.execute(Command.MINIMIZE_WINDOW) +    def print_page(self, options = {}):

Let's create a new class called PrintOptions that people can populate and then we can get the info from when passing to the endpoint.

raju249

comment created time in 4 hours

push eventSeleniumHQ/selenium

Rajendra kadam

commit sha 78eca8208f810af75ed3f4d0db34ea4b550f4ab3

Grid UI Unit Tests (#8865) Co-authored-by: David Burns <david.burns@theautomatedtester.co.uk>

view details

push time in 3 hours

PR merged SeleniumHQ/selenium

Grid UI Unit Tests

<!-- NOTE Please be aware that the Selenium Grid 3.x is being deprecated in favour of the upcoming version 4.x. We won't be receiving any PRs related to the Grid 3.x code. Thanks! -->

Thanks for contributing to Selenium! A PR well described will help maintainers to quickly review and merge it

Before submitting your PR, please check our contributing guidelines. Avoid large PRs, help reviewers by making them as simple and short as possible.

<!--- Provide a general summary of your changes in the Title above -->

Description

<!--- Describe your changes in detail -->

Motivation and Context

<!--- Why is this change required? What problem does it solve? -->

Types of changes

<!--- What types of changes does your code introduce? Put an x in all the boxes that apply: -->

  • [ ] Bug fix (non-breaking change which fixes an issue)
  • [ ] New feature (non-breaking change which adds functionality)
  • [ ] Breaking change (fix or feature that would cause existing functionality to change)

Checklist

<!--- Go over all the following points, and put an x in all the boxes that apply. --> <!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->

  • [ ] I have read the contributing document.
  • [ ] My change requires a change to the documentation.
  • [ ] I have updated the documentation accordingly.
  • [ ] I have added tests to cover my changes.
  • [ ] All new and existing tests passed. <!--- Provide a general summary of your changes in the Title above -->
+13973 -7170

0 comment

16 changed files

raju249

pr closed time in 3 hours

Pull request review commentSeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

+---+title: "Observability"+weight: 2+---++## Table of Contents+ - [Selenium Grid](#selenium-grid)+ - [Observability](#observability)+	 - [Distributed tracing](#distributed-tracing) 	+	 -  [Event logging](#event-logging)+  - [Grid Observability](#grid-observability)+	  - [Visualizing Traces](#visualizing-traces)+	  - [Leveraging event logs](#leveraging-event-logs)+  - [References](#references)++## Selenium Grid++Grid aids in scaling and distributing tests by executing tests on various browser and operating system combinations.++## Observability++Observability has three pillars: traces, metrics and logs. Since Selenium Grid 4 is designed to be fully distributed, observability will make it easier to understand and debug the internals. ++## Distributed tracing+A single request or transaction spans multiple services and components.  Tracing tracks the request lifecycle as each service executes the request. It is useful in debugging in an error scenario.+Some key terms used in tracing context are: ++**Trace**+Tracing allows tracing a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.++**Span**+Each trace is made up of timed operations called spans. A span has a start and end time and it represents operations done by a service. The granularity of span depends on how it is instrumented. Each span has a unique identifier.  All spans within a trace have the same trace id.++**Span Attributes**+Span attributes are key-value pairs which provide additional information about each span.++**Events**+Events are timed-stamped logs within a span. They provide additional context to the existing spans. Events also contain key-value pairs as event attributes.++## Event logging++Logging is essential to debug an application. Logging is often done in a human-readable format. But for machines to search and analyze the logs, it has to have a well-defined format. Structured logging is a common practice of recording logs consistently in a fixed format. It commonly contains fields like:+ * Timestamp+ * Logging level+ * Logger class+ * Log message (This is further broken down into fields relevant to the operation where the log was recorded)++Logs and events are closely related. Events encapsulate all the possible information available to do a single unit of work. Logs are essentially subsets of an event. At the crux, both aid in debugging.+Refer following resources for detailed understanding:+ 1. [https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/](https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/)+ 2. [https://charity.wtf/2019/02/05/logs-vs-structured-events/](https://charity.wtf/2019/02/05/logs-vs-structured-events/)++## Grid Observability++Selenium server is instrumented with tracing using OpenTelemetry. Every request to the server is traced from start to end. Each trace consists of a series of spans as a request is executed within the server. +Most spans in the Selenium server consist of two events:+1. Normal event - records all information about a unit of work and marks successful completion of the work.+2. Error event - records all information till the error occurs and then records the error information. Marks an exception event.++Running Selenium server + 1. [Standalone](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#standalone-mode)+ 2. [Hub and Node](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#hub-and-node)+ 3. [Fully Distributed](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#fully-distributed)+ 4. [Docker](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#using-docker)++## Visualizing Traces+All spans, events and their respective attributes are part of a trace. Tracing works while running the server in all of the above-mentioned modes.++By default, tracing is enabled in the Selenium server. Selenium server exports the traces via two exporters:+1. Console - Logs all traces and their included spans at FINE level. By default, Selenium server prints logs at INFO level and above. As per need, this can be changed via [LoggingOptions.java](https://github.com/SeleniumHQ/selenium/blob/738dd0ee18a142d3fe69fc5f16889ac770188c93/java/server/src/org/openqa/selenium/grid/log/LoggingOptions.java). Add a line `logger.setLevel(Level.FINE);` Pick a logging level of choice.

I don't think it can be done via command line, but I will take up the task to add that fix. Thank you.

pujagani

comment created time in 3 hours

Pull request review commentSeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

+---+title: "Observability"+weight: 2+---++## Table of Contents+ - [Selenium Grid](#selenium-grid)+ - [Observability](#observability)+	 - [Distributed tracing](#distributed-tracing) 	+	 -  [Event logging](#event-logging)+  - [Grid Observability](#grid-observability)+	  - [Visualizing Traces](#visualizing-traces)+	  - [Leveraging event logs](#leveraging-event-logs)+  - [References](#references)++## Selenium Grid++Grid aids in scaling and distributing tests by executing tests on various browser and operating system combinations.++## Observability++Observability has three pillars: traces, metrics and logs. Since Selenium Grid 4 is designed to be fully distributed, observability will make it easier to understand and debug the internals. ++## Distributed tracing+A single request or transaction spans multiple services and components.  Tracing tracks the request lifecycle as each service executes the request. It is useful in debugging in an error scenario.+Some key terms used in tracing context are: ++**Trace**+Tracing allows tracing a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.

Don't forget oxford comma's :)

pujagani

comment created time in 4 hours

Pull request review commentSeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

+---+title: "Observability"+weight: 2+---++## Table of Contents+ - [Selenium Grid](#selenium-grid)+ - [Observability](#observability)+	 - [Distributed tracing](#distributed-tracing) 	+	 -  [Event logging](#event-logging)+  - [Grid Observability](#grid-observability)+	  - [Visualizing Traces](#visualizing-traces)+	  - [Leveraging event logs](#leveraging-event-logs)+  - [References](#references)++## Selenium Grid++Grid aids in scaling and distributing tests by executing tests on various browser and operating system combinations.++## Observability++Observability has three pillars: traces, metrics and logs. Since Selenium Grid 4 is designed to be fully distributed, observability will make it easier to understand and debug the internals. ++## Distributed tracing+A single request or transaction spans multiple services and components.  Tracing tracks the request lifecycle as each service executes the request. It is useful in debugging in an error scenario.+Some key terms used in tracing context are: ++**Trace**+Tracing allows tracing a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.++**Span**+Each trace is made up of timed operations called spans. A span has a start and end time and it represents operations done by a service. The granularity of span depends on how it is instrumented. Each span has a unique identifier.  All spans within a trace have the same trace id.++**Span Attributes**+Span attributes are key-value pairs which provide additional information about each span.++**Events**+Events are timed-stamped logs within a span. They provide additional context to the existing spans. Events also contain key-value pairs as event attributes.++## Event logging++Logging is essential to debug an application. Logging is often done in a human-readable format. But for machines to search and analyze the logs, it has to have a well-defined format. Structured logging is a common practice of recording logs consistently in a fixed format. It commonly contains fields like:+ * Timestamp+ * Logging level+ * Logger class+ * Log message (This is further broken down into fields relevant to the operation where the log was recorded)++Logs and events are closely related. Events encapsulate all the possible information available to do a single unit of work. Logs are essentially subsets of an event. At the crux, both aid in debugging.+Refer following resources for detailed understanding:+ 1. [https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/](https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/)+ 2. [https://charity.wtf/2019/02/05/logs-vs-structured-events/](https://charity.wtf/2019/02/05/logs-vs-structured-events/)++## Grid Observability++Selenium server is instrumented with tracing using OpenTelemetry. Every request to the server is traced from start to end. Each trace consists of a series of spans as a request is executed within the server. +Most spans in the Selenium server consist of two events:+1. Normal event - records all information about a unit of work and marks successful completion of the work.+2. Error event - records all information till the error occurs and then records the error information. Marks an exception event.++Running Selenium server + 1. [Standalone](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#standalone-mode)+ 2. [Hub and Node](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#hub-and-node)+ 3. [Fully Distributed](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#fully-distributed)+ 4. [Docker](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#using-docker)++## Visualizing Traces+All spans, events and their respective attributes are part of a trace. Tracing works while running the server in all of the above-mentioned modes.++By default, tracing is enabled in the Selenium server. Selenium server exports the traces via two exporters:+1. Console - Logs all traces and their included spans at FINE level. By default, Selenium server prints logs at INFO level and above. As per need, this can be changed via [LoggingOptions.java](https://github.com/SeleniumHQ/selenium/blob/738dd0ee18a142d3fe69fc5f16889ac770188c93/java/server/src/org/openqa/selenium/grid/log/LoggingOptions.java). Add a line `logger.setLevel(Level.FINE);` Pick a logging level of choice.

People are not going to get the Grid code and recompile. Can this be done via the command line? If not can you add a task to do that please.

pujagani

comment created time in 4 hours

Pull request review commentSeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

+---+title: "Observability"+weight: 2+---++## Table of Contents+ - [Selenium Grid](#selenium-grid)+ - [Observability](#observability)+	 - [Distributed tracing](#distributed-tracing) 	+	 -  [Event logging](#event-logging)+  - [Grid Observability](#grid-observability)+	  - [Visualizing Traces](#visualizing-traces)+	  - [Leveraging event logs](#leveraging-event-logs)+  - [References](#references)++## Selenium Grid++Grid aids in scaling and distributing tests by executing tests on various browser and operating system combinations.++## Observability++Observability has three pillars: traces, metrics and logs. Since Selenium Grid 4 is designed to be fully distributed, observability will make it easier to understand and debug the internals. ++## Distributed tracing+A single request or transaction spans multiple services and components.  Tracing tracks the request lifecycle as each service executes the request. It is useful in debugging in an error scenario.+Some key terms used in tracing context are: ++**Trace**+Tracing allows tracing a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.++**Span**+Each trace is made up of timed operations called spans. A span has a start and end time and it represents operations done by a service. The granularity of span depends on how it is instrumented. Each span has a unique identifier.  All spans within a trace have the same trace id.++**Span Attributes**+Span attributes are key-value pairs which provide additional information about each span.++**Events**+Events are timed-stamped logs within a span. They provide additional context to the existing spans. Events also contain key-value pairs as event attributes.++## Event logging++Logging is essential to debug an application. Logging is often done in a human-readable format. But for machines to search and analyze the logs, it has to have a well-defined format. Structured logging is a common practice of recording logs consistently in a fixed format. It commonly contains fields like:+ * Timestamp+ * Logging level+ * Logger class+ * Log message (This is further broken down into fields relevant to the operation where the log was recorded)++Logs and events are closely related. Events encapsulate all the possible information available to do a single unit of work. Logs are essentially subsets of an event. At the crux, both aid in debugging.+Refer following resources for detailed understanding:+ 1. [https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/](https://www.honeycomb.io/blog/how-are-structured-logs-different-from-events/)+ 2. [https://charity.wtf/2019/02/05/logs-vs-structured-events/](https://charity.wtf/2019/02/05/logs-vs-structured-events/)++## Grid Observability++Selenium server is instrumented with tracing using OpenTelemetry. Every request to the server is traced from start to end. Each trace consists of a series of spans as a request is executed within the server. +Most spans in the Selenium server consist of two events:+1. Normal event - records all information about a unit of work and marks successful completion of the work.+2. Error event - records all information till the error occurs and then records the error information. Marks an exception event.++Running Selenium server + 1. [Standalone](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#standalone-mode)+ 2. [Hub and Node](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#hub-and-node)+ 3. [Fully Distributed](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#fully-distributed)+ 4. [Docker](https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4#using-docker)++## Visualizing Traces+All spans, events and their respective attributes are part of a trace. Tracing works while running the server in all of the above-mentioned modes.++By default, tracing is enabled in the Selenium server. Selenium server exports the traces via two exporters:+1. Console - Logs all traces and their included spans at FINE level. By default, Selenium server prints logs at INFO level and above. As per need, this can be changed via [LoggingOptions.java](https://github.com/SeleniumHQ/selenium/blob/738dd0ee18a142d3fe69fc5f16889ac770188c93/java/server/src/org/openqa/selenium/grid/log/LoggingOptions.java). Add a line `logger.setLevel(Level.FINE);` Pick a logging level of choice.+2. Jaeger UI - OpenTelemetry provides the APIs and SDKs to instrument traces in the code. Whereas Jaeger is a tracing backend, that aids in collecting the tracing telemetry data and providing querying, filtering and visualizing features for the data.++[Detailed instructions of visualizing traces using Jaeger UI](https://github.com/SeleniumHQ/selenium/blob/a28b4beeeed965a352025a09f26fe2a9567cdeb3/java/server/src/org/openqa/selenium/grid/commands/tracing.txt)++[A very good example and scripts to run the server and send traces to Jaeger](https://github.com/manoj9788/tracing-selenium-grid)++## Leveraging event logs+Tracing has to be enabled for event logging as well, even if one does not wish to export traces to visualize them.  +**By default, tracing is enabled. No additional parameters need to be passed to see logs on the console.**+All events within a span are logged at INFO level. Error events are logged at WARN level. This includes error events as well. ++All event logs have the following fields :+ | Field | Field value | Description |+|-|-|-|+| Event time | eventId | Timestamp of the event record in epoch nanoseconds. |+| Trace Id  | tracedId | Each trace is uniquely identified by a trace id. |+| Span Id  | spanId | Each span within a trace is uniquely identified by a span id. |+| Span Kind | spanKind | Span kind is a property of span indicating the type of span. It helps in understanding the nature of the unit of work done by the Span. |+| Event name | eventName | This maps to the log message. |+| Event attributes | eventAttributes | This forms the crux of the event logs, based on the operation executed, it has JSON formatted key-value pairs. This also includes a handler class attribute, to show the logger class. |++ Sample log  ++ ++       INFO [LoggingOptions$1.lambda$export$1] - {+      "traceId": "fc8aef1d44b3cc8bc09eb8e581c4a8eb",+      "spanId": "b7d3b9865d3ddd45",+      "spanKind": "INTERNAL",+      "eventTime": 1597819675128886121,+      "eventName": "Session request execution complete",+      "attributes": {+        "http.status_code": 200,+        "http.handler_class": "org.openqa.selenium.grid.router.HandleSession",+        "http.url": "\u002fsession\u002fdd35257f104bb43fdfb06242953f4c85",+        "http.method": "DELETE",+        "session.id": "dd35257f104bb43fdfb06242953f4c85"+      }+    }+    +In addition to the above fields, based on [OpenTelemetry specification](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/exceptions.md) error logs consist of :+| Field | Field value | Description |+|-|-|-|+| Exception type  | exception.type | The class name of the exception. |+| Exception message  | exception.message | Reason for the exception. |+| Exception stacktrace | exception.stacktrace | Prints the call stack at the point of time when the exception was thrown. Helps in understanding the origin of the exception. |+ ++Sample error log +  ++    WARN [LoggingOptions$1.lambda$export$1] - {+      "traceId": "7efa5ea57e02f89cdf8de586fe09f564",+      "spanId": "914df6bc9a1f6e2b",+      "spanKind": "INTERNAL",+      "eventTime": 1597820253450580272,+      "eventName": "exception",+      "attributes": {+        "exception.type": "org.openqa.selenium.ScriptTimeoutException",+        "exception.message": "Unable to execute request: java.sql.SQLSyntaxErrorException: Table 'mysql.sessions_mappa' doesn't exist ..." (full message will be printed),+        "exception.stacktrace": "org.openqa.selenium.ScriptTimeoutException: java.sql.SQLSyntaxErrorException: Table 'mysql.sessions_mappa' doesn't exist\nBuild info: version: '4.0.0-alpha-7', revision: 'Unknown'\nSystem info: host: 'Puja-Jaganis-MacBook-Pro.local', ip: 'fe80:0:0:0:10d5:b63a:bdc6:1aff%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.6', java.version: '11.0.7'\nDriver info: driver.version: unknown ...." (full stack will be printed),

You might want to remove your name from the host

pujagani

comment created time in 4 hours

Pull request review commentSeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

+---+title: "Observability"+weight: 2+---++## Table of Contents+ - [Selenium Grid](#selenium-grid)+ - [Observability](#observability)+	 - [Distributed tracing](#distributed-tracing) 	+	 -  [Event logging](#event-logging)+  - [Grid Observability](#grid-observability)+	  - [Visualizing Traces](#visualizing-traces)+	  - [Leveraging event logs](#leveraging-event-logs)+  - [References](#references)++## Selenium Grid++Grid aids in scaling and distributing tests by executing tests on various browser and operating system combinations.++## Observability++Observability has three pillars: traces, metrics and logs. Since Selenium Grid 4 is designed to be fully distributed, observability will make it easier to understand and debug the internals. ++## Distributed tracing+A single request or transaction spans multiple services and components.  Tracing tracks the request lifecycle as each service executes the request. It is useful in debugging in an error scenario.+Some key terms used in tracing context are: ++**Trace**+Tracing allows tracing a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.
Tracing allows one to trace a request through multiple services, starting from its origin to its final destination. This request's journey helps in debugging, monitoring the end-to-end flow, and identifying failures. A trace depicts the end-to-end request flow. Each trace has a unique id as its identifier.
pujagani

comment created time in 4 hours

issue closedSeleniumHQ/selenium-ide

selenium ide chrome plugin does not record correctly type in

🐛 Bug Report

A clear and concise description of what the bug is.

<!-- Please be sure to include an SSCCE (Short, Self Contained, Correct [compilable] example) http://sscce.org/

If you have an issue with file saving, please see https://github.com/SeleniumHQ/selenium-ide/issues/363 instead. The current save behavior is a known limitation of browser extensions that we're actively working on fixing. -->

To Reproduce

Steps to reproduce the behavior: Launch selenium IDE go to http://indeed.co.uk then type in the "what" field "selenium" then clear the "where field" and type "london" click on "find job" button

Expected behavior

The "london" word typed in should appear in the selenium recorded step but it's not the case.

selenium_ide_type_action_not_recorded

Project file reproducing this issue (highly encouraged)

Indeed.zip

Issues without a reproduction project are likely to stall.

Environment

OS: Windows 10 Selenium IDE Version: 3.17.0 Browser: Chrome Browser Version: 85.0.4183.102

closed time in 4 hours

viseth

issue commentSeleniumHQ/selenium-ide

selenium ide chrome plugin does not record correctly type in

upgrade the browser chrome to 87 and the issue is no longer seen.

viseth

comment created time in 4 hours

PR opened SeleniumHQ/seleniumhq.github.io

Add observability doc under a new advanced features section in Grid 4

Thanks for contributing to the Selenium site and documentation! A PR well described will help maintainers to quickly review and merge it

Before submitting your PR, please check our contributing guidelines. Avoid large PRs, help reviewers by making them as simple and short as possible.

<!--- Provide a general summary of your changes in the Title above -->

Description

<!--- Describe your changes in detail --> Add observability doc under Grid 4 section as an advanced feature.

Motivation and Context

<!--- Why is this change required? What problem does it solve? --> Grid 4 introduces observability in terms of tracing and event logs. The changes add a doc to describe the concepts and steps for setting up.

Types of changes

<!--- What types of changes does your code introduce? Put an x in all the boxes that apply: -->

  • [X] Change to the site (I am attaching a screenshot showing the before and after)
  • [ ] Code example added (and I also added the example to all translated languages)
  • [ ] Improved translation
  • [ ] Added new translation (and I also added a notice to each document missing translation)

Checklist

<!--- Go over all the following points, and put an x in all the boxes that apply. -->

  • [X] I have read the contributing document.
  • [X] I have used hugo to render the site/docs locally and I am sure it works. <!--- Provide a general summary of your changes in the Title above -->

Before

image

After

image

image

+1316 -0

0 comment

16 changed files

pr created time in 4 hours

issue commentSeleniumHQ/selenium

Elements with linked style not selectable and lead to TimeoutException

Hi, I think you should try with different attribute for class =''left-nav-body". eg- WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, "nav[aria-label="Control Hub Left Navigation"]"))) since aria-label is also the attribute of same tag , it might work.

@nitesh261193,

Thank you for the reply.

I tried your suggestion but it didn't work. I spent some time looking for other ways and other Chrome extensions to help. I tried many different possibilities, but they all produce the same TimeoutException.

Besides what you suggested, here's what I tried to select the object I want to interact with.

`# Tried 11/25 None work

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, "body.momentum.md.md-admin.atlas-mch-data-table--spark-144523--enabled.control-hub-refresh.overview-state.screen-lg:nth-child(2) webex-main.control-hub-container:nth-child(2) nav.shell-sidebar nav.left-nav-body mch-left-nav-item-group:nth-child(4) ul.left-nav-item-group.md-margin__horizontal--none mch-left-nav-item:nth-child(3) li.left-nav-item > span.left-nav-item__link")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//span[@class='left-nav-item__link'][contains(.,'Calling')]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//span[@class='left-nav-item__link'][normalize-space()='Calling']")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//span[@class='left-nav-item__link'][contains(.,'Calling')]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//span[contains(@class,'left-nav-item__link')])[12]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//span[@class='left-nav-item__link'])[12]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//span[contains(@class,'link')])[12]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//span[contains(.,'Calling')])[1]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "@FindBy(xpath = '//li[@class='left-nav-item'][contains(.,'Calling')]')")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//span[@class='left-nav-item__link'][contains(.,'Calling')]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//span[contains(.,'Calling')]alkme-id,'walkme-id-nav-item-calling')]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//li[@data-walkme-id='walkme-id-nav-item-calling']")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//li[contains(@class,'left-nav-item left-nav-item__active')]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//li[@class='left-nav-item left-nav-item__active']")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//li[contains(@data-test-name,'calling')]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//li[@data-test-name='calling']")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//li[contains(.,'Calling')]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//li[contains(@class,'active')])[1]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//li[contains(@role,'listitem')])[12]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//li[@tabindex='0'])[12]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//li[contains(@tabindex,'0')])[12]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "(//li[@role='listitem'])[12]")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//span[normalize-space()='Calling']")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//mch-left-nav-item-group[4]/ul/mch-left-nav-item/li/span")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.XPATH, "//mch-left-nav-item-group[2]/ul/mch-left-nav-item/li/span")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, "body.momentum.md.md-admin.atlas-mch-data-table--spark-144523--enabled.control-hub-refresh.overview-state.screen-md:nth-child(2) webex-main.control-hub-container:nth-child(2) nav.shell-sidebar nav.left-nav-body mch-left-nav-item-group:nth-child(4) ul.left-nav-item-group.md-margin__horizontal--none mch-left-nav-item:nth-child(3) li.left-nav-item > span.left-nav-item__link")))

WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, "body.momentum.md.md-admin.atlas-mch-data-table--spark-144523--enabled.control-hub-refresh.screen-lg.overview-state:nth-child(2) webex-main.control-hub-container:nth-child(2) main.shell-page.control-hub-refresh webex-ui-view-wrapper.row.full.collapse:nth-child(4) div.ng-scope div.ng-scope page-layout.overview-page.ng-scope section.page-layout__section.default div.page-layout__content.page-layout__content--scrollable.page-layout__content--cards div.ng-scope div.ng-scope div.row.md-padding__horizontal--xl.md-padding__bottom div.small-12.medium-12.large-4.columns.refresh-card-container.md-padding--none:nth-child(1) div.small-12.medium-6.large-12.columns.md-margin__top:nth-child(1) md-card.md-card div.card-header-container div.small-2.columns.text-right button.status-menu-button.md-button.md-button--none span.md-button__children > i.icon.icon-more_14")))`

In addition , you can try dynamic xpath as well to fetch web element, eg- webelement//following::nav[1] webelement refers in above statement-WebDriverWait(driver, long_delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, "nav[class='shell-sidebar']")))

I hope my comments will be able to solve your problem. @cp-community

I have not yet tried using dynamic Xpath. I will give that a try.

cp-community

comment created time in 5 hours

issue openedmozilla/geckodriver

Hanging HTTP request when deleting session

System

  • Version: 0.28.0
  • Platform: Windows 8.1 SL
  • Firefox: 83.0 (64-битный)
  • Selenium: none (use only geckodriver win http requests)

Testcase

When running commands sequentially:

POST [..url ..] / session
DELETE [..url ..] / window

if there was no url opening between them:

POST [..url ..] / url

the calling script hangs after executing a DELETE request. The geckodriver appears to be not responding to the request.

Sample (Pascal Script):

procedure test(Sender: TObject);
var s, sessionId :string;
begin
s := HttpQuery('POST','http://localhost:1234/session',conn_timeout,'',TStringStream.Create('{"capabilities": {}}'));
debug('Open session:');
debug(s);
  try
    sessionId := ReadJSonFromString(s).FindPath('value.sessionId').value;
  except
    sessionId := '';
  end;
    debug(sessionId);  // ok

      // If you uncomment this part of the code, the script will work fine.
      //s := HttpQuery('POST','http://localhost:1234/session/'+sessionId+'/url',conn_timeout,'',
      //TStringStream.Create(
      //'{"url": "https://yandex.ru"}'
      //));
      //debug(s)

debug('Close window')

// Problem:
s := HttpQuery('DELETE','http://localhost:1234/session/'+sessionId+'/window',conn_timeout,'',nil);

debug(s);
end;     

P.S. The same script, when used with operadriver and chromedriver, works correctly, even if there was no url request P.P.S. Sorry for the english (I am using google translate))

created time in 5 hours

push eventSeleniumHQ/seleniumhq.github.io

Selenium CI Bot

commit sha 9cd55aea28090a6cde756b9b2eb9969c27718658

Fix spelling error (#556)[deploy site] Co-authored-by: JS31096 <12621691+JS31096@users.noreply.github.com> 23bde8c29363cac044fd24cf447f54192371e2ec

view details

push time in 6 hours

more