Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,13 @@ public void informationWithElements() {
String valueInfo = emailTxt.getAttribute("value");
assertEquals(valueInfo,"admin@localhost");

// Fetch Dom Property
String propInfo = emailTxt.getDomProperty("value");
assertEquals(propInfo,"admin@localhost");

// Fetch Dom Attribute
String attrInfo = emailTxt.getDomAttribute("value");
assertEquals(attrInfo,"admin@localhost");

driver.quit();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,9 @@ val text = driver.findElement(By.id("justanotherlink")).getText()



## Fetching Attributes or Properties
## Fetching Attributes and Properties

### Get Attribute
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May be we need to be more precise now with the difeerences between getAtrribute, getDomAttribute and getDomProperty

example:

Returns the element's property value if present, otherwise falls back to the attribute value. This convenience method handles the common case but can be ambiguous. For precise control, use getDomProperty() or getDomAttribute() instead.

@diemol any thoughts !

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are showing in here how to use it. Let me know if any changes are needed at code level?

Copy link
Contributor

@sbabcoc sbabcoc Nov 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@harsha509 getAttribute() is actually deprecated for just that reason.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Including a synopsis of this information would be helpful: What's the difference between an "attribute" and a "property" in the DOM? | Quiz Interview Questions with Solutions https://share.google/lB3bUx9KDK28LOx9B

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @sbabcoc,

I’m already aware of the distinction, this is exactly why I asked for the documentation to clearly outline the difference in a way users can understand.

Also getAtrribute is not deprecated yet in selenium see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i am unable to understand the discussion and reasoning around the new information added about new methods at document and code level, and it seems to me i am repeating myself again. if this PR isn't correct then don't add it. i don't know what to do in here further. im finding this exhausting.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the regular process of contributing to a project to send a PR. Sometimes people don't understand the context. They ask questions, change the context, and then follow up by asking more questions. Some PRs stay open and in discussions for weeks, sometimes months. It's not ideal, but that's just the way it is.

Sometimes, it's very quick. Sometimes it takes a bit longer. I'm very happy that you're taking the time to contribute. I hope you understand that sometimes it doesn't go through at the first try. You get feedback, and then we iterate on it. It's not perfect, but it's a collaborative process. This fosters a sense of working as a team, and without feedback, there would be no point in open source.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @rpallavisharma ,

There is nothing wrong in this PR and I totally understand the intention behind the PR and appreciate the additions.

My point is that introducing getDomAttribute() and getDomProperty() without first clarifying the ambiguity of getAttribute() may confuse users even more.

The docs should reflect the real behavior of getAtrribute, since ambiguity affects users in practice.

So, as a final suggestion from my review, please update the getAttribute() explanation to something like:

getAttribute Returns the element's property value if present, otherwise falls back to the attribute value. This convenience method handles the common case but can be ambiguous. For precise control, use getDomProperty() or getDomAttribute() instead.

Once that is clearly stated, the existing code example can be adjusted accordingly, and we won’t need separate sections for getDomAttribute() and getDomProperty().

Also, here is the additional info, regarding the ambiguity for your reference:

  • getAttribute() is not a W3C command — it executes JavaScript internally (js atoms), so its behavior differs.
  • getDomAttribute() and getDomProperty() are W3C-compliant commands.

Hope this clarifies everything!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@harsha509 you don't want to have section for the new commands added separately in document?

Only get attribute which already exists should be there? And modified to what you wrote?

Then the code for the new commands where does that go?

In that case this PR doesn't do it.

It added information for new commands with code examples.

@diemol sure we can continue this discussion , as much as necessary. Fine with me.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are three methods get attribute get dom property get dom attribute . these are three different methods. we kept get attribute for backward compatibility, and added two new.
i created that PR to showcase two new and code examples for it. didn't change get attribute.
this blog - https://saucelabs.com/resources/blog/selenium-4-new-element-attribute-and-property-methods

the problem now is that you are saying we update get attribute definition as well? or we add the information of these two new methods in same method?


Fetches the run time value associated with a
DOM attribute. It returns the data associated
Expand Down Expand Up @@ -281,3 +283,55 @@ driver.get("https://www.selenium.dev/selenium/web/inputs.html")
val attr = driver.findElement(By.name("email_input")).getAttribute("value")
{{< /tab >}}
{{< /tabpane >}}


### Get Dom Property

This method retrieves the value of a specific DOM property of a web element.

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L67-L69" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}


### Get Dom Attribute

This method retrieves the value of a specific HTML attribute of a web element

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L71-L73" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,9 @@ val text = driver.findElement(By.id("justanotherlink")).getText()
{{< /tab >}}
{{< /tabpane >}}

## Fetching Attributes or Properties
## Fetching Attributes and Properties

### Get Attribute

Fetches the run time value associated with a
DOM attribute. It returns the data associated
Expand All @@ -265,13 +267,64 @@ with the DOM attribute or property of the element.
{{< tab header="JavaScript" text=true >}}
{{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L55-L59">}}
{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< tab header="Kotlin" >}}
// Navigate to URL
driver.get("https://www.selenium.dev/selenium/web/inputs.html")

//fetch the value property associated with the textbox
val attr = driver.findElement(By.name("email_input")).getAttribute("value")
{{< /tab >}}
{{< /tabpane >}}


### Get Dom Property

This method retrieves the value of a specific DOM property of a web element.

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L67-L69" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}


### Get Dom Attribute

This method retrieves the value of a specific HTML attribute of a web element

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L71-L73" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}

Original file line number Diff line number Diff line change
Expand Up @@ -258,19 +258,21 @@ val text = driver.findElement(By.id("justanotherlink")).getText()
{{< /tab >}}
{{< /tabpane >}}

## Fetching Attributes or Properties
## Fetching Attributes and Properties

### Get Attribute

Fetches the run time value associated with a
DOM attribute. It returns the data associated
with the DOM attribute or property of the element.

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L60-L65" >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L60-L64" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}
{{< tab header="Python" text=true >}}
{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L44-L46" >}}
{{< /tab >}}
{{< /tab >}}
{{< tab header="CSharp" text=true >}}
{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L58-L62" >}}
{{< /tab >}}
Expand All @@ -280,13 +282,63 @@ with the DOM attribute or property of the element.
{{< tab header="JavaScript" text=true >}}
{{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L55-L59">}}
{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< tab header="Kotlin" >}}
// Navigate to URL
driver.get("https://www.selenium.dev/selenium/web/inputs.html")

//fetch the value property associated with the textbox
val attr = driver.findElement(By.name("email_input")).getAttribute("value")
{{< /tab >}}
{{< /tabpane >}}


### Get Dom Property

This method retrieves the value of a specific DOM property of a web element.

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L67-L69" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}


### Get Dom Attribute

This method retrieves the value of a specific HTML attribute of a web element

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L71-L73" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}
Original file line number Diff line number Diff line change
Expand Up @@ -277,3 +277,55 @@ val attr = driver.findElement(By.name("email_input")).getAttribute("value")

{{< /tab >}}
{{< /tabpane >}}


### Get Dom Property

This method retrieves the value of a specific DOM property of a web element.

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L67-L69" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}


### Get Dom Attribute

This method retrieves the value of a specific HTML attribute of a web element

{{< tabpane langEqualsHeader=true >}}
{{< tab header="Java" text=true >}}
{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L71-L73" >}}
{{< /tab >}}
{{< tab header="Python" text=true >}}

{{< /tab >}}
{{< tab header="CSharp" text=true >}}

{{< /tab >}}
{{< tab header="Ruby" text=true >}}

{{< /tab >}}
{{< tab header="JavaScript" text=true >}}

{{< /tab >}}
{{< tab header="Kotlin" >}}

{{< /tab >}}
{{< /tabpane >}}
Loading