diff --git a/examples/python/tests/elements/test_finders.py b/examples/python/tests/elements/test_finders.py
index 11e1eea98ce..bdab1f8c552 100644
--- a/examples/python/tests/elements/test_finders.py
+++ b/examples/python/tests/elements/test_finders.py
@@ -1,46 +1,38 @@
-import pytest
-from selenium import webdriver
from selenium.webdriver.common.by import By
-# The tests below marked as skipped mirror the HTML snippet shown at the top of the
-# "Finding web elements" documentation and are illustrative only, matching how the
-# same examples are shown for the other language bindings:
-#
-#
-# - …
-#
- …
-#
- Tomato is a Vegetable…
-#
-#
-# - …
-#
- …
-#
- Tomato is a Fruit…
-#
+LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
-@pytest.mark.skip(reason="illustrative example, not an executable test")
-def test_basic_finders(driver):
- vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
+def test_first_matching_element(driver):
+ driver.get(LOCATORS_PAGE)
+ first_input = driver.find_element(By.CLASS_NAME, "information")
+
+ assert first_input.get_attribute("id") == "fname"
-@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_subset_of_dom(driver):
- fruits = driver.find_element(By.ID, 'fruits')
- fruit = fruits.find_element(By.CLASS_NAME, 'tomatoes')
+ driver.get(LOCATORS_PAGE)
+ form = driver.find_element(By.TAG_NAME, "form")
+ input_element = form.find_element(By.CLASS_NAME, "information")
+
+ assert input_element.get_attribute("id") == "fname"
-@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
- fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
+ driver.get(LOCATORS_PAGE)
+ input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
+
+ assert input_element.get_attribute("id") == "fname"
-@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
- plants = driver.find_elements(By.TAG_NAME, 'li')
+ driver.get(LOCATORS_PAGE)
+ inputs = driver.find_elements(By.TAG_NAME, "input")
+ assert len(inputs) > 1
-def test_evaluating_shadow_dom():
- driver = webdriver.Chrome()
+
+def test_evaluating_shadow_dom(driver):
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
@@ -52,43 +44,32 @@ def test_evaluating_shadow_dom():
assert shadow_host.is_displayed()
assert shadow_content.is_displayed()
- driver.quit()
-
-def test_get_element():
- driver = webdriver.Chrome()
- driver.get('https://www.example.com')
+def test_get_element(driver):
+ driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
- print(element.text)
+ print(f"Paragraph text:{element.text}")
assert len(elements) > 0
- driver.quit()
+def test_find_elements_from_element(driver):
+ driver.get(LOCATORS_PAGE)
-def test_find_elements_from_element():
- driver = webdriver.Chrome()
- driver.get('https://www.example.com')
-
- element = driver.find_element(By.TAG_NAME, 'div')
- elements = element.find_elements(By.TAG_NAME, 'p')
- for e in elements:
- print(e.text)
+ form = driver.find_element(By.TAG_NAME, 'form')
+ elements = form.find_elements(By.TAG_NAME, 'input')
+ for element in elements:
+ print(element.get_attribute('value'))
assert len(elements) > 0
- driver.quit()
+def test_get_active_element(driver):
+ driver.get(LOCATORS_PAGE)
-def test_get_active_element():
- driver = webdriver.Chrome()
- driver.get('https://www.selenium.dev/selenium/web/web-form.html')
-
- driver.find_element(By.CSS_SELECTOR, '[name="my-text"]').send_keys('webElement')
+ driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
- assert attr == 'my-text'
-
- driver.quit()
+ assert attr == 'fname'
diff --git a/examples/ruby/spec/elements/finders_spec.rb b/examples/ruby/spec/elements/finders_spec.rb
index c0540635e86..ca10461e326 100644
--- a/examples/ruby/spec/elements/finders_spec.rb
+++ b/examples/ruby/spec/elements/finders_spec.rb
@@ -4,41 +4,61 @@
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
+ let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
- context 'without executing finders', skip: 'these are just examples, not actual tests' do
- it 'finds the first matching element' do
- driver.find_element(class: 'tomatoes')
- end
-
- it 'uses a subset of the dom to find an element' do
- fruits = driver.find_element(id: 'fruits')
- fruits.find_element(class: 'tomatoes')
- end
-
- it 'uses an optimized locator' do
- driver.find_element(css: '#fruits .tomatoes')
- end
-
- it 'finds all matching elements' do
- driver.find_elements(tag_name: 'li')
- end
-
- # rubocop:disable RSpec/Output
- it 'gets an element from a collection' do
- elements = driver.find_elements(:tag_name, 'p')
- elements.each { |e| puts e.text }
- end
-
- it 'finds element from element' do
- element = driver.find_element(:tag_name, 'div')
- elements = element.find_elements(:tag_name, 'p')
- elements.each { |e| puts e.text }
- end
- # rubocop:enable RSpec/Output
-
- it 'find active element' do
- driver.find_element(css: '[name="q"]').send_keys('webElement')
- driver.switch_to.active_element.attribute('title')
- end
+ it 'finds the first matching element' do
+ driver.navigate.to locators_page
+ first_input = driver.find_element(class: 'information')
+
+ expect(first_input.attribute('id')).to eq('fname')
+ end
+
+ it 'uses a subset of the dom to find an element' do
+ driver.navigate.to locators_page
+ form = driver.find_element(tag_name: 'form')
+ input_element = form.find_element(class: 'information')
+
+ expect(input_element.attribute('id')).to eq('fname')
+ end
+
+ it 'uses an optimized locator' do
+ driver.navigate.to locators_page
+ input_element = driver.find_element(css: 'form .information')
+
+ expect(input_element.attribute('id')).to eq('fname')
+ end
+
+ it 'finds all matching elements' do
+ driver.navigate.to locators_page
+ inputs = driver.find_elements(tag_name: 'input')
+
+ expect(inputs.size).to be > 1
+ end
+
+ # rubocop:disable RSpec/Output
+ it 'gets an element from a collection' do
+ driver.navigate.to locators_page
+ elements = driver.find_elements(tag_name: 'p')
+ elements.each { |e| puts "Paragraph text:#{e.text}" }
+
+ expect(elements).not_to be_empty
+ end
+
+ it 'finds element from element' do
+ driver.navigate.to locators_page
+ form = driver.find_element(tag_name: 'form')
+ elements = form.find_elements(tag_name: 'input')
+ elements.each { |e| puts e.attribute('value') }
+
+ expect(elements).not_to be_empty
+ end
+ # rubocop:enable RSpec/Output
+
+ it 'finds the active element' do
+ driver.navigate.to locators_page
+ driver.find_element(css: '#fname').send_keys('webElement')
+ attr = driver.switch_to.active_element.attribute('name')
+
+ expect(attr).to eq('fname')
end
end
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.en.md b/website_and_docs/content/documentation/webdriver/elements/finders.en.md
index 0bf1c9b031e..a875d2f7a62 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.en.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.en.md
@@ -12,22 +12,8 @@ description: >
One of the most fundamental aspects of using Selenium is obtaining element references to work with.
Selenium offers a number of built-in [locator strategies]({{< ref "locators.md" >}}) to uniquely identify an element.
-There are many ways to use the locators in very advanced scenarios. For the purposes of this documentation,
-let's consider this HTML snippet:
-
-
-```html
-
- - …
-
- …
-
- Tomato is a Vegetable…
-
-
- - …
-
- …
-
- Tomato is a Fruit…
-
-```
+There are many ways to use the locators in very advanced scenarios. For the purposes of this documentation,
+use the [Selenium locator test page](https://www.selenium.dev/selenium/web/locators_tests/locators.html).
## First matching element
@@ -38,28 +24,32 @@ first element found within a given context.
When the find element method is called on the driver instance, it
returns a reference to the first element in the DOM that matches with the provided locator.
-This value can be stored and used for future element actions. In our example HTML above, there are
-two elements that have a class name of "tomatoes" so this method will return the element in the "vegetables" list.
+This value can be stored and used for future element actions. On the Selenium locator test page, there are
+two elements with the class name `information`, so this method returns the first text input.
{{< tabpane langEqualsHeader=true >}}
{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement vegetable = driver.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement firstInput = driver.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L23">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var vegetable = driver.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var firstInput = driver.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15">}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10-L11" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const vegetable = await driver.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const firstInput = await driver.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val vegetable: WebElement = driver.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val firstInput: WebElement = driver.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -67,35 +57,37 @@ val vegetable: WebElement = driver.findElement(By.className("tomatoes"))
### Evaluating a subset of the DOM
Rather than finding a unique locator in the entire DOM, it is often useful to narrow the search to the scope
-of another located element. In the above example there are two elements with a class name of "tomatoes" and
-it is a little more challenging to get the reference for the second one.
+of another located element.
-One solution is to locate an element with a unique attribute that is an ancestor of the desired element and not an
-ancestor of the undesired element, then call find element on that object:
+One solution is to locate an ancestor of the desired element, then call find element on that object:
{{< tabpane langEqualsHeader=true >}}
{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruits = driver.findElement(By.id("fruits"));
-WebElement fruit = fruits.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement form = driver.findElement(By.tagName("form"));
+WebElement input = form.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L28-L29">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IWebElement fruits = driver.FindElement(By.Id("fruits"));
-IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IWebElement form = driver.FindElement(By.TagName("form"));
+IWebElement input = form.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15">}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L17-L19" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruits = await driver.findElement(By.id('fruits'));
-const fruit = fruits.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const form = await driver.findElement(By.tagName('form'));
+const input = await form.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruits = driver.findElement(By.id("fruits"))
-val fruit = fruits.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val form = driver.findElement(By.tagName("form"))
+val input = form.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -121,7 +113,7 @@ SearchContext shadowRoot = shadowHost.getShadowRoot();
WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
-{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L47-L50">}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
@@ -150,27 +142,31 @@ To improve the performance slightly, we can use either CSS or XPath to find this
See the [Locator strategy suggestions]({{< ref "/documentation/test_practices/encouraged/locators" >}}) in our
[Encouraged test practices]({{< ref "/documentation/test_practices/encouraged" >}}) section.
-For this example, we'll use a CSS Selector:
+For this example, we'll use a CSS selector:
{{< tabpane langEqualsHeader=true >}}
{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement input = driver.findElement(By.cssSelector("form .information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L34" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var input = driver.FindElement(By.CssSelector("form .information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L25-L26" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const input = await driver.findElement(By.css('form .information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val input = driver.findElement(By.cssSelector("form .information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -180,27 +176,31 @@ val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
There are several use cases for needing to get references to all elements that match a locator, rather
than just the first one. The plural find elements methods return a collection of element references.
If there are no matches, an empty list is returned. In this case,
-references to all fruits and vegetable list items will be returned in a collection.
+references to all input elements will be returned in a collection.
{{< tabpane langEqualsHeader=true >}}
{{< badge-examples >}}
{{< tab header="Java" >}}
-List plants = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List inputs = driver.findElements(By.tagName("input"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IReadOnlyList plants = driver.FindElements(By.TagName("li"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IReadOnlyList inputs = driver.FindElements(By.TagName("input"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L33" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const plants = await driver.findElements(By.tagName('li'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const inputs = await driver.findElements(By.tagName('input'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val plants: List = driver.findElements(By.tagName("li"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val inputs: List = driver.findElements(By.tagName("input"))
{{< /tab >}}
{{< /tabpane >}}
@@ -212,14 +212,15 @@ need to iterate over the collection and identify the one you want.
{{< tabpane langEqualsHeader=true >}}
{{< badge-examples >}}
{{< tab header="Java" >}}
-List elements = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L62-L64" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -232,7 +233,7 @@ namespace FindElementsExample {
IWebDriver driver = new FirefoxDriver();
try {
// Navigate to Url
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
// Get all the elements available with tag name 'p'
IList < IWebElement > elements = driver.FindElements(By.TagName("p"));
@@ -248,7 +249,7 @@ namespace FindElementsExample {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L28-L29" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L42" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -256,7 +257,7 @@ const {Builder, By} = require('selenium-webdriver');
let driver = await new Builder().forBrowser('firefox').build();
try {
// Navigate to Url
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
// Get all the elements available with tag 'p'
let elements = await driver.findElements(By.css('p'));
@@ -276,7 +277,7 @@ import org.openqa.selenium.firefox.FirefoxDriver
fun main() {
val driver = FirefoxDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
// Get all the elements available with tag name 'p'
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
@@ -307,15 +308,15 @@ To achieve this, the parent WebElement is chained with 'findElements' to access
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("https://example.com");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Get element with tag name 'div'
- WebElement element = driver.findElement(By.tagName("div"));
+ // Get the form element
+ WebElement element = driver.findElement(By.tagName("form"));
- // Get all the elements available with tag name 'p'
- List elements = element.findElements(By.tagName("p"));
+ // Get all input elements in the form
+ List elements = element.findElements(By.tagName("input"));
for (WebElement e : elements) {
- System.out.println(e.getText());
+ System.out.println(e.getAttribute("value"));
}
} finally {
driver.quit();
@@ -324,7 +325,7 @@ To achieve this, the parent WebElement is chained with 'findElements' to access
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L75-L78" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -336,15 +337,15 @@ namespace FindElementsFromElement {
public static void Main(string[] args) {
IWebDriver driver = new ChromeDriver();
try {
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Get element with tag name 'div'
- IWebElement element = driver.FindElement(By.TagName("div"));
+ // Get the form element
+ IWebElement element = driver.FindElement(By.TagName("form"));
- // Get all the elements available with tag name 'p'
- IList < IWebElement > elements = element.FindElements(By.TagName("p"));
+ // Get all input elements in the form
+ IList < IWebElement > elements = element.FindElements(By.TagName("input"));
foreach(IWebElement e in elements) {
- System.Console.WriteLine(e.Text);
+ System.Console.WriteLine(e.GetAttribute("value"));
}
} finally {
driver.Quit();
@@ -354,7 +355,7 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L33-L35" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L48-L51" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -364,15 +365,15 @@ namespace FindElementsFromElement {
.forBrowser('chrome')
.build();
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
- // Get element with tag name 'div'
- let element = driver.findElement(By.css("div"));
+ // Get the form element
+ let element = driver.findElement(By.css("form"));
- // Get all the elements available with tag name 'p'
- let elements = await element.findElements(By.css("p"));
+ // Get all input elements in the form
+ let elements = await element.findElements(By.css("input"));
for(let e of elements) {
- console.log(await e.getText());
+ console.log(await e.getAttribute("value"));
}
})();
{{< /tab >}}
@@ -383,15 +384,15 @@ namespace FindElementsFromElement {
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
- // Get element with tag name 'div'
- val element = driver.findElement(By.tagName("div"))
+ // Get the form element
+ val element = driver.findElement(By.tagName("form"))
- // Get all the elements available with tag name 'p'
- val elements = element.findElements(By.tagName("p"))
+ // Get all input elements in the form
+ val elements = element.findElements(By.tagName("input"))
for (e in elements) {
- println(e.text)
+ println(e.getAttribute("value"))
}
} finally {
driver.quit()
@@ -414,11 +415,11 @@ It is used to track (or) find DOM element which has the focus in the current bro
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("http://www.google.com");
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
// Get attribute of current active element
- String attr = driver.switchTo().activeElement().getAttribute("title");
+ String attr = driver.switchTo().activeElement().getAttribute("name");
System.out.println(attr);
} finally {
driver.quit();
@@ -427,7 +428,7 @@ It is used to track (or) find DOM element which has the focus in the current bro
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L89-L90" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -439,11 +440,11 @@ It is used to track (or) find DOM element which has the focus in the current bro
IWebDriver driver = new ChromeDriver();
try {
// Navigate to Url
- driver.Navigate().GoToUrl("https://www.google.com");
- driver.FindElement(By.CssSelector("[name='q']")).SendKeys("webElement");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
// Get attribute of current active element
- string attr = driver.SwitchTo().ActiveElement().GetAttribute("title");
+ string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
System.Console.WriteLine(attr);
} finally {
driver.Quit();
@@ -453,18 +454,18 @@ It is used to track (or) find DOM element which has the focus in the current bro
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L41" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L58-L60" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
- await driver.get('https://www.google.com');
- await driver.findElement(By.css('[name="q"]')).sendKeys("webElement");
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+ await driver.findElement(By.css('#fname')).sendKeys("webElement");
// Get attribute of current active element
- let attr = await driver.switchTo().activeElement().getAttribute("title");
+ let attr = await driver.switchTo().activeElement().getAttribute("name");
console.log(`${attr}`)
})();
{{< /tab >}}
@@ -475,11 +476,11 @@ It is used to track (or) find DOM element which has the focus in the current bro
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://www.google.com")
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
// Get attribute of current active element
- val attr = driver.switchTo().activeElement().getAttribute("title")
+ val attr = driver.switchTo().activeElement().getAttribute("name")
print(attr)
} finally {
driver.quit()
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.ja.md b/website_and_docs/content/documentation/webdriver/elements/finders.ja.md
index 933571f9d0e..53dd2ce0b5a 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.ja.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.ja.md
@@ -13,20 +13,7 @@ description: >
Seleniumを使用する最も基本的な側面の1つは、操作する要素の参照を取得することです。
Seleniumは、要素を一意に識別するための多数の組み込み[ロケーター戦略]({{< ref "locators.md" >}})を提供します。
非常に高度なシナリオでロケーターを使用する方法はたくさんあります。
-このドキュメントの目的のために、このHTMLスニペットについて考えてみましょう。
-
-```html
-
- - …
-
- …
-
- Tomato is a Vegetable…
-
-
- - …
-
- …
-
- Tomato is a Fruit…
-
-```
+このドキュメントの目的のために、[Seleniumロケーターテストページ](https://www.selenium.dev/selenium/web/locators_tests/locators.html)を使用します。
## 最初に一致する要素
@@ -37,59 +24,68 @@ Seleniumは、要素を一意に識別するための多数の組み込み[ロ
ドライバーインスタンスで要素の検索メソッドが呼び出されると、提供されたロケーターと一致するDOMの最初の要素への参照が返されます。
この値は保存して、将来の要素アクションに使用できます。
-上記のHTMLの例では、クラス名が "tomatoes" の要素が2つあるため、このメソッドは "vegetables" リストの要素を返します。
+Seleniumロケーターテストページには、クラス名が `information` の要素が2つあるため、このメソッドは最初のテキスト入力を返します。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement vegetable = driver.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement firstInput = driver.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L23">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var vegetable = driver.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var firstInput = driver.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10-L11" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const vegetable = await driver.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const firstInput = await driver.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val vegetable: WebElement = driver.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val firstInput: WebElement = driver.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
### DOMのサブセットの評価
-DOM全体で一意のロケーターを見つけるのではなく、検索を別の検索された要素のスコープに絞り込むと便利なことがよくあります。
-上記の例では、クラス名が "トマト" の2つの要素があり、2番目の要素の参照を取得するのは少し困難です。
+DOM全体で一意のロケーターを見つけるのではなく、検索を別の検索された要素のスコープに絞り込むと便利なことがよくあります。
-1つの解決策は、目的の要素の祖先であり、不要な要素の祖先ではない一意の属性を持つ要素を見つけて、そのオブジェクトでfind要素を呼び出すことです。
+1つの解決策は、目的の要素の祖先を見つけて、そのオブジェクトでfind要素を呼び出すことです。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruits = driver.findElement(By.id("fruits"));
-WebElement fruit = fruits.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement form = driver.findElement(By.tagName("form"));
+WebElement input = form.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L28-L29">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IWebElement fruits = driver.FindElement(By.Id("fruits"));
-IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IWebElement form = driver.FindElement(By.TagName("form"));
+IWebElement input = form.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L17-L19" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruits = await driver.findElement(By.id('fruits'));
-const fruit = fruits.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const form = await driver.findElement(By.tagName('form'));
+const input = await form.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruits = driver.findElement(By.id("fruits"))
-val fruit = fruits.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val form = driver.findElement(By.tagName("form"))
+val input = form.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -114,7 +110,7 @@ SearchContext shadowRoot = shadowHost.getShadowRoot();
WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
-{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L47-L50">}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
@@ -144,23 +140,28 @@ shadow_content = shadow_root.find_element(css: '#shadow_content')
この例では、CSSセレクターを使用します。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement input = driver.findElement(By.cssSelector("form .information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L34" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var input = driver.FindElement(By.CssSelector("form .information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L25-L26" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const input = await driver.findElement(By.css('form .information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val input = driver.findElement(By.cssSelector("form .information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -170,26 +171,31 @@ val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
最初の要素だけでなく、ロケーターに一致するすべての要素への参照を取得する必要があるユースケースがいくつかあります。
複数の要素の検索メソッドは、要素参照のコレクションを返します。
一致するものがない場合は、空のリストが返されます。
-この場合、すべてのfruitsとvegetableのリストアイテムへの参照がコレクションに返されます。
+この場合、すべてのinput要素への参照がコレクションに返されます。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-List plants = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List inputs = driver.findElements(By.tagName("input"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IReadOnlyList plants = driver.FindElements(By.TagName("li"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IReadOnlyList inputs = driver.FindElements(By.TagName("input"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L33" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const plants = await driver.findElements(By.tagName('li'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const inputs = await driver.findElements(By.tagName('input'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val plants: List = driver.findElements(By.tagName("li"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val inputs: List = driver.findElements(By.tagName("input"))
{{< /tab >}}
{{< /tabpane >}}
@@ -198,15 +204,17 @@ val plants: List = driver.findElements(By.tagName("li"))
必要な要素を特定する必要があります。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-List elements = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L62-L64" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -219,7 +227,7 @@ namespace FindElementsExample {
IWebDriver driver = new FirefoxDriver();
try {
// Navigate to Url
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
// Get all the elements available with tag name 'p'
IList < IWebElement > elements = driver.FindElements(By.TagName("p"));
@@ -235,7 +243,7 @@ namespace FindElementsExample {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L28-L29" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L42" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -243,7 +251,7 @@ const {Builder, By} = require('selenium-webdriver');
let driver = await new Builder().forBrowser('firefox').build();
try {
// Navigate to Url
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
// Get all the elements available with tag 'p'
let elements = await driver.findElements(By.css('p'));
@@ -263,7 +271,7 @@ import org.openqa.selenium.firefox.FirefoxDriver
fun main() {
val driver = FirefoxDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
// Get all the elements available with tag name 'p'
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
@@ -282,6 +290,7 @@ fun main() {
これを実現するために、親WebElementは'findElements'と連鎖して子要素にアクセスします。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
@@ -293,15 +302,15 @@ fun main() {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("https://example.com");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Get element with tag name 'div'
- WebElement element = driver.findElement(By.tagName("div"));
+ // Get the form element
+ WebElement element = driver.findElement(By.tagName("form"));
- // Get all the elements available with tag name 'p'
- List elements = element.findElements(By.tagName("p"));
+ // Get all input elements in the form
+ List elements = element.findElements(By.tagName("input"));
for (WebElement e : elements) {
- System.out.println(e.getText());
+ System.out.println(e.getAttribute("value"));
}
} finally {
driver.quit();
@@ -310,7 +319,7 @@ fun main() {
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L75-L78" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -322,15 +331,15 @@ namespace FindElementsFromElement {
public static void Main(string[] args) {
IWebDriver driver = new ChromeDriver();
try {
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Get element with tag name 'div'
- IWebElement element = driver.FindElement(By.TagName("div"));
+ // Get the form element
+ IWebElement element = driver.FindElement(By.TagName("form"));
- // Get all the elements available with tag name 'p'
- IList < IWebElement > elements = element.FindElements(By.TagName("p"));
+ // Get all input elements in the form
+ IList < IWebElement > elements = element.FindElements(By.TagName("input"));
foreach(IWebElement e in elements) {
- System.Console.WriteLine(e.Text);
+ System.Console.WriteLine(e.GetAttribute("value"));
}
} finally {
driver.Quit();
@@ -340,7 +349,7 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L33-L35" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L48-L51" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -350,15 +359,15 @@ namespace FindElementsFromElement {
.forBrowser('chrome')
.build();
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
- // Get element with tag name 'div'
- let element = driver.findElement(By.css("div"));
+ // Get the form element
+ let element = driver.findElement(By.css("form"));
- // Get all the elements available with tag name 'p'
- let elements = await element.findElements(By.css("p"));
+ // Get all input elements in the form
+ let elements = await element.findElements(By.css("input"));
for(let e of elements) {
- console.log(await e.getText());
+ console.log(await e.getAttribute("value"));
}
})();
{{< /tab >}}
@@ -369,15 +378,15 @@ namespace FindElementsFromElement {
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
- // Get element with tag name 'div'
- val element = driver.findElement(By.tagName("div"))
+ // Get the form element
+ val element = driver.findElement(By.tagName("form"))
- // Get all the elements available with tag name 'p'
- val elements = element.findElements(By.tagName("p"))
+ // Get all input elements in the form
+ val elements = element.findElements(By.tagName("input"))
for (e in elements) {
- println(e.text)
+ println(e.getAttribute("value"))
}
} finally {
driver.quit()
@@ -391,6 +400,7 @@ namespace FindElementsFromElement {
これは、現在のブラウジングコンテキストでフォーカスを持っているDOM要素を追跡(または)検索するために使用されます。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
@@ -399,11 +409,11 @@ namespace FindElementsFromElement {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("http://www.google.com");
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
// Get attribute of current active element
- String attr = driver.switchTo().activeElement().getAttribute("title");
+ String attr = driver.switchTo().activeElement().getAttribute("name");
System.out.println(attr);
} finally {
driver.quit();
@@ -412,7 +422,7 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L89-L90" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -424,11 +434,11 @@ namespace FindElementsFromElement {
IWebDriver driver = new ChromeDriver();
try {
// Navigate to Url
- driver.Navigate().GoToUrl("https://www.google.com");
- driver.FindElement(By.CssSelector("[name='q']")).SendKeys("webElement");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
// Get attribute of current active element
- string attr = driver.SwitchTo().ActiveElement().GetAttribute("title");
+ string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
System.Console.WriteLine(attr);
} finally {
driver.Quit();
@@ -438,18 +448,18 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L41" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L58-L60" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
- await driver.get('https://www.google.com');
- await driver.findElement(By.css('[name="q"]')).sendKeys("webElement");
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+ await driver.findElement(By.css('#fname')).sendKeys("webElement");
// Get attribute of current active element
- let attr = await driver.switchTo().activeElement().getAttribute("title");
+ let attr = await driver.switchTo().activeElement().getAttribute("name");
console.log(`${attr}`)
})();
{{< /tab >}}
@@ -460,11 +470,11 @@ namespace FindElementsFromElement {
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://www.google.com")
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
// Get attribute of current active element
- val attr = driver.switchTo().activeElement().getAttribute("title")
+ val attr = driver.switchTo().activeElement().getAttribute("name")
print(attr)
} finally {
driver.quit()
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md b/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md
index a2daa535496..418de7a1730 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md
@@ -13,21 +13,7 @@ description: >
Um dos aspectos mais fundamentais do uso do Selenium é obter referências de elementos para trabalhar.
O Selenium oferece várias [estratégias de localizador]({{< ref "locators.md" >}}) para identificar exclusivamente um elemento.
Há muitas maneiras de usar os localizadores em cenários complexos. Para os propósitos desta documentação,
-vamos considerar este trecho de HTML:
-
-
-```html
-
- - …
-
- …
-
- O tomate é um vegetal…
-
-
- - …
-
- …
-
- O tomate é uma fruta…
-
-```
+use a [página de teste de localizadores do Selenium](https://www.selenium.dev/selenium/web/locators_tests/locators.html).
## Primeiro Elemento correspondente
Muitos localizadores irão corresponder a vários elementos na página.
@@ -37,61 +23,69 @@ primeiro elemento encontrado dentro de um determinado contexto.
### Avaliando o DOM inteiro
Quando o metodo find element é chamado na instância do driver, ele
retorna uma referência ao primeiro elemento no DOM que corresponde ao localizador fornecido.
-Esse valor pode ser guardado e usado para ações futuras do elemento. Em nosso exemplo HTML acima, existem
-dois elementos que têm um nome de classe de "tomatoes" então este método retornará o elemento na lista "vegetables".
+Esse valor pode ser guardado e usado para ações futuras do elemento. Na página de teste de localizadores do Selenium, existem
+dois elementos com o nome de classe `information`, então este método retorna o primeiro campo de texto.
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement vegetable = driver.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement firstInput = driver.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L23">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var vegetable = driver.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var firstInput = driver.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10-L11" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const vegetable = await driver.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const firstInput = await driver.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val vegetable: WebElement = driver.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val firstInput: WebElement = driver.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
### Avaliando um subconjunto do DOM
Ao em vez de tentar encontrar um localizador unico no DOM inteiro, normalmente é útil restringir a busca ao escopo de outro elemento
-já localizado. No exemplo acima existem dois elementos com um nome de classe de "tomatoes" e
-é um pouco mais desafiador obter a referência para o segundo.
+já localizado.
-Uma possível solução seria localizar um elemento com um atributo único que seja um ancestral do elemento desejado e não um
-ancestral do elemento indesejado, então invoque o find element nesse objeto:
+Uma possível solução seria localizar um ancestral do elemento desejado, então invoque o find element nesse objeto:
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruits = driver.findElement(By.id("fruits"));
-WebElement fruit = fruits.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement form = driver.findElement(By.tagName("form"));
+WebElement input = form.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L28-L29">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IWebElement fruits = driver.FindElement(By.Id("fruits"));
-IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IWebElement form = driver.FindElement(By.TagName("form"));
+IWebElement input = form.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L17-L19" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruits = await driver.findElement(By.id('fruits'));
-const fruit = fruits.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const form = await driver.findElement(By.tagName('form'));
+const input = await form.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruits = driver.findElement(By.id("fruits"))
-val fruit = fruits.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val form = driver.findElement(By.tagName("form"))
+val input = form.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -117,7 +111,7 @@ SearchContext shadowRoot = shadowHost.getShadowRoot();
WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
-{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L47-L50">}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
@@ -145,26 +139,31 @@ Para melhorar um pouco o desempenho, podemos usar CSS ou XPath para encontrar es
Veja as [sugestões de estratégia do localizador]({{< ref "/documentation/test_practices/encouraged/locators" >}}) na nossa sessão de
[Práticas de teste incentivadas]({{< ref "/documentation/test_practices/encouraged" >}}).
-Para esse exemplo, utilizaremos o CSS Selector:
+Para esse exemplo, utilizaremos um seletor CSS:
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement input = driver.findElement(By.cssSelector("form .information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L34" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var input = driver.FindElement(By.CssSelector("form .information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L25-L26" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const input = await driver.findElement(By.css('form .information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val input = driver.findElement(By.cssSelector("form .information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -173,26 +172,31 @@ val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
Existem vários casos de uso para a necessidade de obter referências a todos os elementos que correspondem a um localizador, em vez
do que apenas o primeiro. Os métodos plurais find elements retornam uma coleção de referências de elementos.
Se não houver correspondências, uma lista vazia será retornada. Nesse caso,
-referências a todos os itens da lista de frutas e vegetais serão devolvidas em uma coleção.
+referências a todos os elementos input serão devolvidas em uma coleção.
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-List plants = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List inputs = driver.findElements(By.tagName("input"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IReadOnlyList plants = driver.FindElements(By.TagName("li"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IReadOnlyList inputs = driver.FindElements(By.TagName("input"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L33" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const plants = await driver.findElements(By.tagName('li'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const inputs = await driver.findElements(By.tagName('input'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val plants: List = driver.findElements(By.tagName("li"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val inputs: List = driver.findElements(By.tagName("input"))
{{< /tab >}}
{{< /tabpane >}}
@@ -202,15 +206,17 @@ precisa iterar sobre a coleção e identificar o que você deseja.
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-List elements = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L62-L64" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -223,7 +229,7 @@ namespace FindElementsExample {
IWebDriver driver = new FirefoxDriver();
try {
// Navegar até a URL
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
// Obtém todos os elementos disponiveis com o nome da tag 'p'
IList < IWebElement > elements = driver.FindElements(By.TagName("p"));
@@ -239,7 +245,7 @@ namespace FindElementsExample {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L28-L29" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L42" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -247,7 +253,7 @@ const {Builder, By} = require('selenium-webdriver');
let driver = await new Builder().forBrowser('firefox').build();
try {
// Navegar até a URL
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
// Obtém todos os elementos disponiveis com o nome da tag 'p'
let elements = await driver.findElements(By.css('p'));
@@ -267,7 +273,7 @@ import org.openqa.selenium.firefox.FirefoxDriver
fun main() {
val driver = FirefoxDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
// Obtém todos os elementos disponiveis com o nome da tag 'p'
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
@@ -286,6 +292,7 @@ Ele é usado para localizar a lista de WebElements filhos correspondentes dentro
Para realizar isso, o WebElement pai é encadeado com o 'findElements' para acessar seus elementos filhos.
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
@@ -297,15 +304,15 @@ Para realizar isso, o WebElement pai é encadeado com o 'findElements' para aces
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("https://example.com");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Obtém o elemento com o nome da tag 'div'
- WebElement element = driver.findElement(By.tagName("div"));
+ // Obtém o elemento form
+ WebElement element = driver.findElement(By.tagName("form"));
- // Obtém todos os elementos disponiveis com o nome da tag 'p'
- List elements = element.findElements(By.tagName("p"));
+ // Obtém todos os elementos input dentro do form
+ List elements = element.findElements(By.tagName("input"));
for (WebElement e : elements) {
- System.out.println(e.getText());
+ System.out.println(e.getAttribute("value"));
}
} finally {
driver.quit();
@@ -314,7 +321,7 @@ Para realizar isso, o WebElement pai é encadeado com o 'findElements' para aces
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L75-L78" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -326,15 +333,15 @@ namespace FindElementsFromElement {
public static void Main(string[] args) {
IWebDriver driver = new ChromeDriver();
try {
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Obtém o elemento com o nome da tag 'div'
- IWebElement element = driver.FindElement(By.TagName("div"));
+ // Obtém o elemento form
+ IWebElement element = driver.FindElement(By.TagName("form"));
- // Obtém todos os elementos disponíveis com o nome da tag 'p'
- IList < IWebElement > elements = element.FindElements(By.TagName("p"));
+ // Obtém todos os elementos input dentro do form
+ IList < IWebElement > elements = element.FindElements(By.TagName("input"));
foreach(IWebElement e in elements) {
- System.Console.WriteLine(e.Text);
+ System.Console.WriteLine(e.GetAttribute("value"));
}
} finally {
driver.Quit();
@@ -344,7 +351,7 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L33-L35" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L48-L51" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -354,15 +361,15 @@ namespace FindElementsFromElement {
.forBrowser('chrome')
.build();
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
- // Obtém o elemento com o nome da tag 'div'
- let element = driver.findElement(By.css("div"));
+ // Obtém o elemento form
+ let element = driver.findElement(By.css("form"));
- // Obtém todos os elementos disponíveis com o nome da tag 'p'
- let elements = await element.findElements(By.css("p"));
+ // Obtém todos os elementos input dentro do form
+ let elements = await element.findElements(By.css("input"));
for(let e of elements) {
- console.log(await e.getText());
+ console.log(await e.getAttribute("value"));
}
})();
{{< /tab >}}
@@ -373,15 +380,15 @@ namespace FindElementsFromElement {
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
- // Obtém o elemento com o nome da tag 'div'
- val element = driver.findElement(By.tagName("div"))
+ // Obtém o elemento form
+ val element = driver.findElement(By.tagName("form"))
- // Obtém todos os elementos disponíveis com o nome da tag 'p'
- val elements = element.findElements(By.tagName("p"))
+ // Obtém todos os elementos input dentro do form
+ val elements = element.findElements(By.tagName("input"))
for (e in elements) {
- println(e.text)
+ println(e.getAttribute("value"))
}
} finally {
driver.quit()
@@ -395,6 +402,7 @@ namespace FindElementsFromElement {
Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no contexto de navegação atual.
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
@@ -403,11 +411,11 @@ Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no cont
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("http://www.google.com");
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
// Obter atributo do elemento atualmente ativo
- String attr = driver.switchTo().activeElement().getAttribute("title");
+ String attr = driver.switchTo().activeElement().getAttribute("name");
System.out.println(attr);
} finally {
driver.quit();
@@ -416,7 +424,7 @@ Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no cont
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L89-L90" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -428,11 +436,11 @@ Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no cont
IWebDriver driver = new ChromeDriver();
try {
// Navegar até a URL
- driver.Navigate().GoToUrl("https://www.google.com");
- driver.FindElement(By.CssSelector("[name='q']")).SendKeys("webElement");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
// Obter atributo do elemento atualmente ativo
- string attr = driver.SwitchTo().ActiveElement().GetAttribute("title");
+ string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
System.Console.WriteLine(attr);
} finally {
driver.Quit();
@@ -442,18 +450,18 @@ Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no cont
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L41" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L58-L60" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
- await driver.get('https://www.google.com');
- await driver.findElement(By.css('[name="q"]')).sendKeys("webElement");
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+ await driver.findElement(By.css('#fname')).sendKeys("webElement");
// Obter atributo do elemento atualmente ativo
- let attr = await driver.switchTo().activeElement().getAttribute("title");
+ let attr = await driver.switchTo().activeElement().getAttribute("name");
console.log(`${attr}`)
})();
{{< /tab >}}
@@ -464,11 +472,11 @@ Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no cont
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://www.google.com")
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
// Obter atributo do elemento atualmente ativo
- val attr = driver.switchTo().activeElement().getAttribute("title")
+ val attr = driver.switchTo().activeElement().getAttribute("name")
print(attr)
} finally {
driver.quit()
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md b/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md
index 1633e2742cf..a513361ef55 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md
@@ -14,20 +14,7 @@ description: >
使用 Selenium 最基本的特点之一是获取可用于操作的元素引用。
Selenium 提供了许多内置的 [定位策略]({{< ref "locators.md" >}}),用于唯一标识元素。
在更复杂的场景中,可以用多种方式使用这些定位器。为了本篇文档的目的,
-我们来考虑下面的 HTML 片段:
-
-```html
-
- - …
-
- …
-
- Tomato is a Vegetable…
-
-
- - …
-
- …
-
- Tomato is a Fruit…
-
-```
+请使用 [Selenium 定位器测试页面](https://www.selenium.dev/selenium/web/locators_tests/locators.html)。
## 第一个匹配的元素
@@ -39,27 +26,32 @@ Selenium 提供了许多内置的 [定位策略]({{< ref "locators.md" >}}),
当在 driver 实例上调用 find element 方法时,
它会返回 DOM 中与所提供定位器匹配的第一个元素的引用。
该引用可以被保存并用于后续的元素操作。
-在上面的示例 HTML 中,有两个 class 名称为 "tomatoes" 的元素,
-因此此方法会返回位于 "vegetables" 列表中的那个元素。
+在 Selenium 定位器测试页面上,有两个 class 名称为 `information` 的元素,
+因此此方法会返回第一个文本输入框。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement vegetable = driver.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement firstInput = driver.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L23">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var vegetable = driver.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var firstInput = driver.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10-L11" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const vegetable = await driver.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const firstInput = await driver.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val vegetable: WebElement = driver.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val firstInput: WebElement = driver.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -69,35 +61,37 @@ val vegetable: WebElement = driver.findElement(By.className("tomatoes"))
与其在整个 DOM 中寻找唯一的定位器,
通常更有用的是将搜索范围缩小到另一个已定位元素的作用域内。
-在上面的示例中,有两个 class 名为 "tomatoes" 的元素,
-因此要获取第二个元素的引用会更具挑战性。
-一种解决办法是先定位一个具有唯一属性的元素,
-该元素是目标元素的祖先但不是非目标元素的祖先,
+一种解决办法是先定位目标元素的祖先,
然后在该对象上调用 `find element`:
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruits = driver.findElement(By.id("fruits"));
-WebElement fruit = fruits.findElement(By.className("tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement form = driver.findElement(By.tagName("form"));
+WebElement input = form.findElement(By.className("information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L28-L29">}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IWebElement fruits = driver.FindElement(By.Id("fruits"));
-IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IWebElement form = driver.FindElement(By.TagName("form"));
+IWebElement input = form.FindElement(By.ClassName("information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L17-L19" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruits = await driver.findElement(By.id('fruits'));
-const fruit = fruits.findElement(By.className('tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const form = await driver.findElement(By.tagName('form'));
+const input = await form.findElement(By.className('information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruits = driver.findElement(By.id("fruits"))
-val fruit = fruits.findElement(By.className("tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val form = driver.findElement(By.tagName("form"))
+val input = form.findElement(By.className("information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -121,7 +115,7 @@ SearchContext shadowRoot = shadowHost.getShadowRoot();
WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
-{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L47-L50">}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
@@ -153,23 +147,28 @@ shadow_content = shadow_root.find_element(css: '#shadow_content')
在本例中,我们将使用 CSS 选择器:
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-WebElement fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+WebElement input = driver.findElement(By.cssSelector("form .information"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L34" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+var input = driver.FindElement(By.CssSelector("form .information"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L25-L26" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const input = await driver.findElement(By.css('form .information'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val input = driver.findElement(By.cssSelector("form .information"))
{{< /tab >}}
{{< /tabpane >}}
@@ -179,26 +178,31 @@ val fruit = driver.findElement(By.cssSelector("#fruits .tomatoes"))
在某些情况下,需要获取与定位器匹配的所有元素的引用,而不是仅获取第一个。
复数形式的 `find elements` 方法会返回一组元素引用。如果没有匹配项,则返回空列表。
-在本例中,将返回所有水果和蔬菜列表项的引用集合。
+在本例中,将返回所有 input 元素的引用集合。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-List plants = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List inputs = driver.findElements(By.tagName("input"));
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
-IReadOnlyList plants = driver.FindElements(By.TagName("li"));
+driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+IReadOnlyList inputs = driver.FindElements(By.TagName("input"));
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L33" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
-const plants = await driver.findElements(By.tagName('li'));
+await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+const inputs = await driver.findElements(By.tagName('input'));
{{< /tab >}}
{{< tab header="Kotlin" >}}
-val plants: List = driver.findElements(By.tagName("li"))
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+val inputs: List = driver.findElements(By.tagName("input"))
{{< /tab >}}
{{< /tabpane >}}
@@ -208,15 +212,17 @@ val plants: List = driver.findElements(By.tagName("li"))
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
-List elements = driver.findElements(By.tagName("li"));
+driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+List elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L62-L64" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -229,7 +235,7 @@ namespace FindElementsExample {
IWebDriver driver = new FirefoxDriver();
try {
// Navigate to Url
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
// Get all the elements available with tag name 'p'
IList < IWebElement > elements = driver.FindElements(By.TagName("p"));
@@ -245,7 +251,7 @@ namespace FindElementsExample {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L28-L29" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L42" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -253,7 +259,7 @@ const {Builder, By} = require('selenium-webdriver');
let driver = await new Builder().forBrowser('firefox').build();
try {
// Navigate to Url
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
// Get all the elements available with tag 'p'
let elements = await driver.findElements(By.css('p'));
@@ -273,7 +279,7 @@ import org.openqa.selenium.firefox.FirefoxDriver
fun main() {
val driver = FirefoxDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
// Get all the elements available with tag name 'p'
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
@@ -292,6 +298,7 @@ fun main() {
为此,可在父 WebElement 上链式调用 `findElements` 来访问子元素。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
@@ -303,15 +310,15 @@ fun main() {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("https://example.com");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Get element with tag name 'div'
- WebElement element = driver.findElement(By.tagName("div"));
+ // Get the form element
+ WebElement element = driver.findElement(By.tagName("form"));
- // Get all the elements available with tag name 'p'
- List elements = element.findElements(By.tagName("p"));
+ // Get all input elements in the form
+ List elements = element.findElements(By.tagName("input"));
for (WebElement e : elements) {
- System.out.println(e.getText());
+ System.out.println(e.getAttribute("value"));
}
} finally {
driver.quit();
@@ -320,7 +327,7 @@ fun main() {
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L75-L78" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -332,15 +339,15 @@ namespace FindElementsFromElement {
public static void Main(string[] args) {
IWebDriver driver = new ChromeDriver();
try {
- driver.Navigate().GoToUrl("https://example.com");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
- // Get element with tag name 'div'
- IWebElement element = driver.FindElement(By.TagName("div"));
+ // Get the form element
+ IWebElement element = driver.FindElement(By.TagName("form"));
- // Get all the elements available with tag name 'p'
- IList < IWebElement > elements = element.FindElements(By.TagName("p"));
+ // Get all input elements in the form
+ IList < IWebElement > elements = element.FindElements(By.TagName("input"));
foreach(IWebElement e in elements) {
- System.Console.WriteLine(e.Text);
+ System.Console.WriteLine(e.GetAttribute("value"));
}
} finally {
driver.Quit();
@@ -350,7 +357,7 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L33-L35" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L48-L51" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
@@ -360,15 +367,15 @@ namespace FindElementsFromElement {
.forBrowser('chrome')
.build();
- await driver.get('https://www.example.com');
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
- // Get element with tag name 'div'
- let element = driver.findElement(By.css("div"));
+ // Get the form element
+ let element = driver.findElement(By.css("form"));
- // Get all the elements available with tag name 'p'
- let elements = await element.findElements(By.css("p"));
+ // Get all input elements in the form
+ let elements = await element.findElements(By.css("input"));
for(let e of elements) {
- console.log(await e.getText());
+ console.log(await e.getAttribute("value"));
}
})();
{{< /tab >}}
@@ -379,15 +386,15 @@ namespace FindElementsFromElement {
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://example.com")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
- // Get element with tag name 'div'
- val element = driver.findElement(By.tagName("div"))
+ // Get the form element
+ val element = driver.findElement(By.tagName("form"))
- // Get all the elements available with tag name 'p'
- val elements = element.findElements(By.tagName("p"))
+ // Get all input elements in the form
+ val elements = element.findElements(By.tagName("input"))
for (e in elements) {
- println(e.text)
+ println(e.getAttribute("value"))
}
} finally {
driver.quit()
@@ -401,6 +408,7 @@ namespace FindElementsFromElement {
用于跟踪或查找当前浏览上下文中具有焦点的 DOM 元素。
{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
{{< tab header="Java" >}}
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
@@ -409,11 +417,11 @@ namespace FindElementsFromElement {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
- driver.get("http://www.google.com");
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement");
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
// Get attribute of current active element
- String attr = driver.switchTo().activeElement().getAttribute("title");
+ String attr = driver.switchTo().activeElement().getAttribute("name");
System.out.println(attr);
} finally {
driver.quit();
@@ -422,7 +430,7 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Python" text=true >}}
- {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L89-L90" >}}
+ {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}}
{{< /tab >}}
{{< tab header="CSharp" >}}
using OpenQA.Selenium;
@@ -434,11 +442,11 @@ namespace FindElementsFromElement {
IWebDriver driver = new ChromeDriver();
try {
// Navigate to Url
- driver.Navigate().GoToUrl("https://www.google.com");
- driver.FindElement(By.CssSelector("[name='q']")).SendKeys("webElement");
+ driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/locators_tests/locators.html");
+ driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
// Get attribute of current active element
- string attr = driver.SwitchTo().ActiveElement().GetAttribute("title");
+ string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
System.Console.WriteLine(attr);
} finally {
driver.Quit();
@@ -448,18 +456,18 @@ namespace FindElementsFromElement {
}
{{< /tab >}}
{{< tab header="Ruby" text=true >}}
- {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L41" >}}
+ {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L58-L60" >}}
{{< /tab >}}
{{< tab header="JavaScript" >}}
const {Builder, By} = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
- await driver.get('https://www.google.com');
- await driver.findElement(By.css('[name="q"]')).sendKeys("webElement");
+ await driver.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html');
+ await driver.findElement(By.css('#fname')).sendKeys("webElement");
// Get attribute of current active element
- let attr = await driver.switchTo().activeElement().getAttribute("title");
+ let attr = await driver.switchTo().activeElement().getAttribute("name");
console.log(`${attr}`)
})();
{{< /tab >}}
@@ -470,11 +478,11 @@ namespace FindElementsFromElement {
fun main() {
val driver = ChromeDriver()
try {
- driver.get("https://www.google.com")
- driver.findElement(By.cssSelector("[name='q']")).sendKeys("webElement")
+ driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+ driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
// Get attribute of current active element
- val attr = driver.switchTo().activeElement().getAttribute("title")
+ val attr = driver.switchTo().activeElement().getAttribute("name")
print(attr)
} finally {
driver.quit()