profile
viewpoint
Dj ddavison @GitLabHQ Cascadia http://ddavison.io open source enthusiast, gitlabber, selenium committer

ddavison/docker-soapui 29

Run SoapUI Tests through a Docker container

ddavison/chrome-bookmarklet-ide 10

Chrome Bookmarklet IDE

ddavison/aa-selenium-meetup 1

Selenium project that is used in the Ann Arbor Selenium Meetup group

ddavison/aa-selenium-site 1

The Rails site we will be using for ongoing experiments with Selenium. You are welcome to contribute.

ddavison/aoe2cheatsuite 1

Redesigned Age of Empires II Cheat Suite

ddavison/beginning-rust 1

Beginnings with Rustlang

ddavison/BF2M0dder 1

An incredibly old modder for Battlefield 2 (no longer continued) this was my very first project. Ever.

ddavison/chrome-youtube-preview 1

Preview YouTube Videos before going to them

ddavison/chrome-youtube-resizer 1

Extension for resizing YouTube Videos

ddavison/.vim 0

my personal vim files (just so i dont lose them)

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 14 minutes

issue commentStylishThemes/GitHub-Dark

[Question] How would the ideal userstyles sharing platform be like ?

@vednoc @raitaroh thoughts?

KaKi87

comment created time in 31 minutes

issue closedStylishThemes/GitHub-Dark

[Question] How would the ideal userstyles sharing platform be like ?

<!-- Please fill all fields of this template do not ignore them -->

How would the ideal userstyles sharing platform be like ?

<!-- Fill in the numbered steps below with the information required until the question you are submitting becomes apparent. You can add more steps as needed. -->

  1. As a userstyle developer, what would you expect from a userstyles sharing platform ?
  2. If this ideal platform would exist, would you publish your userstyles on it ?
  3. As a userstyle user, what would you expect from a userstyles sharing platform ?
  4. If this ideal platform would exist, would you search userstyles on it ?

Additional context

https://old.reddit.com/r/userstyles/comments/hqy7w7/stylus_will_have_to_change_its_provider_website/


Thanks.

closed time in 33 minutes

KaKi87

issue commentStylishThemes/GitHub-Dark

[Question] How would the ideal userstyles sharing platform be like ?

Alright, perhaps I should have mentioned the two primary goal of my project, which are : providing centralized access to userstyles, and being user-friendly.

That's why I would prefer to mirror host userstyles so they can stay online for users in case the original repository is down for any reason, and that's why I would prefer managing accounts on my own instead of requiring an account on another platform, like GitHub for instance, that users doesn't use. But, I did imagined that GitHub SSO would be a key feature.

Although I didn't expected that serving users would not be one of your goals, it is still an interesting point of view.

Thanks for answering. :)

KaKi87

comment created time in 33 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.

Don't forget oxford comma's :)

pujagani

comment created time in an hour

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 37 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)++[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 an hour

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 an hour

issue commentStylishThemes/GitHub-Dark

[Question] How would the ideal userstyles sharing platform be like ?

I can't seem to find StylishThemes' userstyles on it, and it seems to only work with GitHub repositories, is that something you would expect ?

There are plenty styles form various authors inclusing this org, just scroll down, it seems you cant search by authors.

and it seems to only work with GitHub repositories, is that something you would expect ?

Yes, git is everywhere not just GitHub/GitLab, I wouldn't expect site xyz to decide how my styles are to be shared or supported, even if the license is permissive to allow styles to be hosted elsewhere without my permission. If you look usercss has metadata that is followed when using Stylus.

https://github.com/StylishThemes/Wikipedia-Dark/blob/e1050b19f4cff4396712490d12064154474f899f/wikipedia-dark.user.css#L2-L10

I dont expect any site to undo the original devs intentions by in any way trying to change that intention.

That one seem to require manually filling markdown files and submitting a pull request to a repository, is that something you would expect too ?

Any simple way to submit styles is a welcome process especially if it doesnt require access to site xyz via login.

So, I'm not sure how GitHub's search engine helps in that matter. And finally, users are only familiar with Stylus, that's why there is a Find styles button on Stulys, they won't understand how a website like GitHub works.

GitHubs search is not perfect and Stylus is using what it uses for their own reasons, I dont really Care if my styles are found by users or not, I dont dev styles for that purpose.

I know and I agree, unfortunately, as developers, we can't force users to code, as users, their role is to use and report bugs.

Contributing is not only code, assuming that the only way to contribute to a project is by submitting code, then we are lost before we start. I would expect users to make contributions of any kind that they can make, if it has code or not, its beside the point. This is rather an important point, users should know and be so educated that many ways to contribute besides code.

I think there is one other thing missing from the platforms you mentioned : community features. (commenting, reporting bugs, rating, etc.)

I think not, sorry, I wouldnt want to find that my styles are now on site xyz (mostly without my knowledge or permission even if license permits) and then that it now offers users a way to ask for support there instead of the repo that is already setup for these purposes. Users on said sites, like userstyle.org, use comments (or any text they can submit) to report bugs but then the dev is not there to provide any support.

What does that say about the dev or site? Sorry definetly not, support should point to where style points to. Of course not all styles are usercss, not all styles use git and not all devs provide, source you can contribute back to, they dont provide any support. Its not a perfect situation but its the reason whey I do rather than use someone elses work that follows some cowboy unrules.

That's also true, that's why I'm trying to get direct feedback from you, developers and users, in order to create the one platform that will truly meet everyone's needs, that's what I need help for.

I think existing sites are new and need to be developed to accommodate how styles are developed, Ide rather contribute than work on the same but different site, and not just add styles of low quality like userstyles has for the sake of content.. Many devs I know rather do their own then to work on someone elses ideas, I also am very aware that getting code merged is not as simple as it would be if you working for yourself. The opensource spirit is dying slowly of death by ego.

Also, a personal dislike is having to create yet another login or use gmail, github, So any site that demands this will find one less person using it.

All and all, both sites I mentioned are imperfect because they are new and only one dev at the elm. Until they get fed up and then like openusercss disappear without a trace.

KaKi87

comment created time in an hour

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 an hour

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 an hour

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 3 hours

push eventSeleniumHQ/seleniumhq.github.io

lucienlugeek

commit sha 23bde8c29363cac044fd24cf447f54192371e2ec

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

view details

push time in 3 hours

PR merged SeleniumHQ/seleniumhq.github.io

Fix spelling error

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

Description

<!--- Describe your changes in detail --> Just fix a typo.

Types of changes

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

  • [ ] 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)
  • [x] 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.
  • [ ] 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 -->
+1 -1

2 comments

1 changed file

lucienlugeek

pr closed time in 3 hours

issue closedSeleniumHQ/selenium

Selenium modify timezone

Puppeteer has a page.emulateTimezone('Australia/Melbourne') method to modify the time zone. Does Selenium have a similar method?

closed time in 3 hours

ychrewd

issue commentSeleniumHQ/selenium

Selenium modify timezone

❗️ It seems this issue is not using any of the supported templates

💡 Supported issue types are (they start with):

  • 🐛 Bug Report (bugs found in a recent release)
  • 🚀 Feature Proposal (a useful feature you would like to propose)
  • 💥 Regression Report (a supported feature is not working anymore)

Issue templates help this project to stay in shape, please use them and fill them out completely. By doing that you are helping the project because the community and maintainers can provide prompt feedback, and potentially solve the issue.

If you are asking a question, a better way to address this is:

If you think this is incorrect, please feel free to open a new issue.

Thank you for your contributions.

ychrewd

comment created time in 3 hours

issue commentSeleniumHQ/selenium

Selenium modify timezone

👋 Hi there! Thank you for creating this issue.

I am the Selenium Assistant Bot 🤖, I triage issues in this repository. If I can't do it, I label it to help maintainers identify issues that need triaging.

I am an Open Source project 🙌, post bugs or ideas here!

ychrewd

comment created time in 3 hours

issue openedSeleniumHQ/selenium

Selenium modify timezone

Puppeteer has a page.emulateTimezone('Australia/Melbourne') method to modify the time zone. Does Selenium have a similar method?

created time in 3 hours

startedkubernetes/minikube

started time in 8 hours

push eventStylishThemes/GitHub-Dark

github-actions[bot]

commit sha 4cec5abaa7c88061cb25aafb84cf75576a04668b

automated regeneration

view details

github-actions[bot]

commit sha 357cbec9287bfa9c5b08cb72369f300dac8f29fc

v4.2.75 * automated regeneration (github-actions[bot])

view details

push time in 9 hours

created tagStylishThemes/GitHub-Dark

tagv4.2.75

:octocat: Dark GitHub style

created time in 9 hours

issue openedSeleniumHQ/docker-selenium

Docker Node on Dynamic Grid hangs when starting a new session on Ubuntu Server 20.04.1 LTS

🐛 Bug Report

When running a Dynamic Grid on Ubuntu Server 20.04.1 LTS, trying to start a new session causes the Docker Node to hang on "Waiting for server to start" and time out after 1 minute, despite the newly-created session container having started correctly. This doesn't happen when running on Windows 10.

To Reproduce

  1. Spin up a clean Ubuntu Server 20.04.1 LTS VM
  2. Run this script: https://gist.github.com/Davipb/4799a2c76d91e5d16249ee0a5353d06a
  3. Note how the new session request hangs forever or times out.
    • If you check the logs with docker-compose -f /selenium/docker-compose.yml logs, you'll see the docker node is stuck waiting for the newly created Firefox container to start, despite it already having started
    • You can confirm the Firefox container started correctly by grabbing its assigned port with docker container ls then running curl localhost:XXXX/wd/hub/status (where XXXX is the port). It should return "ready": true.

Alternatively, if you want to do it manually or on an existing system:

  1. Get a system running Ubuntu Server 20.04.1 LTS with Docker and Docker Compose installed, make sure the Docker daemon is listening on TCP port 2375
  2. Use the following docker-compose.yml and config.toml to start a new Dynamic Grid: https://gist.github.com/Davipb/4941e60d28ec5abf3b399aad9da6d370
    • Paths might need to be tweaked, they assume all files are on /selenium/
  3. Try to start a new session with curl --request POST --header 'Content-Type: application/json;charset=utf-8' --data '{"desiredCapabilities":{"browserName":"firefox"}}' localhost:4444/wd/hub/session
  4. Note how the new session request hangs forever or times out.
    • If you check the logs with docker-compose logs, you'll see the docker node is stuck waiting for the newly created Firefox container to start, despite it already having started
    • You can confirm the Firefox container started correctly by grabbing its assigned port with docker container ls then running curl localhost:XXXX/wd/hub/status (where XXXX is the port). It should return "ready": true.

Expected behavior

A session should be created using the newly-spawned Firefox container and returned to the user.

Test script reproducing this issue (when applicable)

For a clean Ubuntu Server 20.04.1 LTS VM: https://gist.github.com/Davipb/4799a2c76d91e5d16249ee0a5353d06a

For an existing system with Docker and Docker compose already installed:
Download these files https://gist.github.com/Davipb/4941e60d28ec5abf3b399aad9da6d370 (Paths might need to be tweaked, they assume all files are on /selenium/) then run

docker-compose up -d
curl --request POST --header 'Content-Type: application/json;charset=utf-8' --data '{"desiredCapabilities":{"browserName":"firefox"}}' localhost:4444/wd/hub/session

Environment

OS: Ubuntu Server 20.04.1 LTS Docker-Selenium image version: 4.0.0-alpha-7-20201119 selenium/hub image ID: bbb6c93776f9 selenium/node-docker image ID: 47572806ad04 selenium/standalone-firefox image ID: 8cb05ddc50eb Docker version: 19.03.13, build 4484c46d9d Docker-Compose version (if applicable): 1.27.4, build 40524192 Exact Docker command to start the containers: docker-compose up -d using these files: https://gist.github.com/Davipb/4941e60d28ec5abf3b399aad9da6d370

created time in 10 hours

push eventgitlabhq/gitlab-runner

Suzanne Selhorn

commit sha 7574b67e89fbca427e0340da6077054668e3d241

Fixed Vale future tense issues Related to: https://gitlab.com/gitlab-org/gitlab/-/issues/284446

view details

Amy Qualls

commit sha 3055fefaa79174725438c6dcc4ccfaff2dccac25

Merge branch 'docs-selhorn-vale-fixes-2' into 'master' Fixed Vale future tense issues See merge request gitlab-org/gitlab-runner!2585

view details

push time in 11 hours

issue commentSeleniumHQ/selenium

Performance issue in SelectElement dotnet

Thanks!

VictorYakushenko

comment created time in 12 hours

push eventgitlabhq/gitlab-runner

Suzanne Selhorn

commit sha c42d5500ef5b9249705380f9764923da53f26a66

Fixed Vale future tense errors Related to: https://gitlab.com/gitlab-org/gitlab/-/issues/284446

view details

Amy Qualls

commit sha 2ca0a9ad5fea237862036445c834d8ba1291b573

Merge branch 'docs-selhorn-vale-future-1' into 'master' Fixed Vale future tense errors See merge request gitlab-org/gitlab-runner!2584

view details

push time in 12 hours

push eventSeleniumHQ/selenium

elgatov

commit sha 44b7ba443ab328f15283c4fdfcc5f124563cfd3d

Cache IWebElement before checking TagName is correct (#8904) When creating a SelectElement we must first check the WrappedElement tag is select and throw a UnexpectedTagNameException otherwise. Previously the WrappedElement was not cached so WebDriver API could be called up to three times: first to check the tag is not null, second to check it's value is select (ignoring case) and a third time as a parameter of UnexpectedTagNameException if any of the previous conditions failed. Fixes #8899 Co-authored-by: elgato <el.gato.negro.v@gmail.com>

view details

push time in 13 hours

PR merged SeleniumHQ/selenium

Cache IWebElement before checking TagName is correct

When creating a SelectElement we must first check the WrappedElement tag is select and throw a UnexpectedTagNameException otherwise.

Previously the WrappedElement was not cached so WebDriver API could be called up to three times: first to check the tag is not null, second to check it's value is select (ignoring case) and a third time as a parameter of UnexpectedTagNameException if any of the previous conditions failed.

Fixes #8899

<!-- 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: -->

  • [x] 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! -->

  • [x] 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 -->
+4 -2

1 comment

1 changed file

elgatov

pr closed time in 13 hours

push eventSeleniumHQ/selenium

Alexei Barantsev

commit sha eb37b63eaa07a286800da63d0e160c95a14a0beb

[java] Deleting unused import (and formatting code)

view details

Alexei Barantsev

commit sha c87ee5994fd8bef80206fc4692bdac97769ded77

[java] Using Optional to check for nullity is over-engineering

view details

Alexei Barantsev

commit sha 3dbf71deb98e6895438b4216fd63dcc791d234f8

[java] Fixing minor issues reported by IDEA code linter

view details

push time in 14 hours

Pull request review commentSeleniumHQ/selenium

Grid UI Unit Tests

 zip_file(         "//java/server/src/org/openqa/selenium/grid:__pkg__",     ], )++jest_test(+    name = "test",+    args = [

Please add size = "small" under name. It will allow us to use bazel queries

raju249

comment created time in 14 hours

more