Encontrando Elementos Web
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 para identificar exclusivamente um elemento. Há muitas maneiras de usar os localizadores em cenários complexos. Para os propósitos desta documentação, use a página de teste de localizadores do Selenium.
Primeiro Elemento correspondente
Muitos localizadores irão corresponder a vários elementos na página. O método de elemento de localização singular retornará uma referência ao 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. 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.
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));/examples/java/src/test/java/dev/selenium/elements/FindersTest.java
package dev.selenium.elements;
import dev.selenium.BaseTest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FindersTest extends BaseTest {
private static final String LOCATORS_PAGE =
"https://www.selenium.dev/selenium/web/locators_tests/locators.html";
@Test
public void findsFirstMatchingElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));
assertEquals("fname", firstInput.getAttribute("id"));
}
@Test
public void findsElementWithinASubsetOfTheDom() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void usesAnOptimizedLocator() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void findsAllMatchingElements() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));
assertTrue(inputs.size() > 1);
}
@Test
public void getsElementFromACollection() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
assertTrue(elements.size() > 0);
}
@Test
public void findsElementsFromElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}
assertTrue(elements.size() > 0);
}
@Test
public void getsActiveElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");
assertEquals("fname", attr);
}
}
# same examples are shown for the other language bindings:
#/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
namespace SeleniumDocs.Elements
{
[TestClass]
public class FindersTest : BaseTest
{
private const string LocatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html";
[TestMethod]
public void FindsFirstMatchingElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", firstInput.GetAttribute("id"));
}
[TestMethod]
public void FindsElementWithinASubsetOfTheDom()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void UsesAnOptimizedLocator()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void FindsAllMatchingElements()
{
StartDriver();
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));
Assert.IsTrue(inputs.Count > 1);
}
[TestMethod]
public void GetsElementFromACollection()
{
StartDriver();
driver.Url = LocatorsPage;
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void FindsElementsFromElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void GetsActiveElement()
{
StartDriver();
driver.Url = LocatorsPage;
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
Assert.AreEqual("fname", attr);
}
}
}
driver.find_element(class: 'tomatoes')
end/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
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
end
end
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));/examples/javascript/test/elements/finders.spec.js
const {Builder, By} = require('selenium-webdriver');
const assert = require('assert');
const LOCATORS_PAGE = 'https://www.selenium.dev/selenium/web/locators_tests/locators.html';
describe('Finders', function () {
it('finds the first matching element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));
assert.equal(await firstInput.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds an element within a subset of the DOM', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('uses an optimized locator', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds all matching elements', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));
assert.ok(inputs.length > 1);
await driver.quit();
});
it('gets an element from a collection', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('finds elements from an element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('gets the active element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');
assert.equal(attr, 'fname');
await driver.quit();
});
});
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt
package dev.selenium.elements
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.openqa.selenium.By
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FindersTest : BaseTest() {
private val locatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
@Test
fun findsFirstMatchingElement() {
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))
assertEquals("fname", firstInput.getAttribute("id"))
}
@Test
fun findsElementWithinASubsetOfTheDom() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun usesAnOptimizedLocator() {
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun findsAllMatchingElements() {
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))
assertTrue(inputs.size > 1)
}
@Test
fun getsElementFromACollection() {
driver.get(locatorsPage)
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}
assertTrue(elements.isNotEmpty())
}
@Test
fun findsElementsFromElement() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}
assertTrue(elements.isNotEmpty())
}
@Test
fun getsActiveElement() {
driver.get(locatorsPage)
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")
assertEquals("fname", attr)
}
@BeforeEach
fun configureImplicitWait() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
}
}
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.
Uma possível solução seria localizar um ancestral do elemento desejado, então invoque o find element nesse objeto:
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));/examples/java/src/test/java/dev/selenium/elements/FindersTest.java
package dev.selenium.elements;
import dev.selenium.BaseTest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FindersTest extends BaseTest {
private static final String LOCATORS_PAGE =
"https://www.selenium.dev/selenium/web/locators_tests/locators.html";
@Test
public void findsFirstMatchingElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));
assertEquals("fname", firstInput.getAttribute("id"));
}
@Test
public void findsElementWithinASubsetOfTheDom() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void usesAnOptimizedLocator() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void findsAllMatchingElements() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));
assertTrue(inputs.size() > 1);
}
@Test
public void getsElementFromACollection() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
assertTrue(elements.size() > 0);
}
@Test
public void findsElementsFromElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}
assertTrue(elements.size() > 0);
}
@Test
public void getsActiveElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");
assertEquals("fname", attr);
}
}
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
namespace SeleniumDocs.Elements
{
[TestClass]
public class FindersTest : BaseTest
{
private const string LocatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html";
[TestMethod]
public void FindsFirstMatchingElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", firstInput.GetAttribute("id"));
}
[TestMethod]
public void FindsElementWithinASubsetOfTheDom()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void UsesAnOptimizedLocator()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void FindsAllMatchingElements()
{
StartDriver();
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));
Assert.IsTrue(inputs.Count > 1);
}
[TestMethod]
public void GetsElementFromACollection()
{
StartDriver();
driver.Url = LocatorsPage;
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void FindsElementsFromElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void GetsActiveElement()
{
StartDriver();
driver.Url = LocatorsPage;
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
Assert.AreEqual("fname", attr);
}
}
}
it 'uses an optimized locator' do
driver.find_element(css: '#fruits .tomatoes')/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
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
end
end
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));/examples/javascript/test/elements/finders.spec.js
const {Builder, By} = require('selenium-webdriver');
const assert = require('assert');
const LOCATORS_PAGE = 'https://www.selenium.dev/selenium/web/locators_tests/locators.html';
describe('Finders', function () {
it('finds the first matching element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));
assert.equal(await firstInput.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds an element within a subset of the DOM', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('uses an optimized locator', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds all matching elements', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));
assert.ok(inputs.length > 1);
await driver.quit();
});
it('gets an element from a collection', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('finds elements from an element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('gets the active element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');
assert.equal(attr, 'fname');
await driver.quit();
});
});
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt
package dev.selenium.elements
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.openqa.selenium.By
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FindersTest : BaseTest() {
private val locatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
@Test
fun findsFirstMatchingElement() {
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))
assertEquals("fname", firstInput.getAttribute("id"))
}
@Test
fun findsElementWithinASubsetOfTheDom() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun usesAnOptimizedLocator() {
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun findsAllMatchingElements() {
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))
assertTrue(inputs.size > 1)
}
@Test
fun getsElementFromACollection() {
driver.get(locatorsPage)
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}
assertTrue(elements.isNotEmpty())
}
@Test
fun findsElementsFromElement() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}
assertTrue(elements.isNotEmpty())
}
@Test
fun getsActiveElement() {
driver.get(locatorsPage)
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")
assertEquals("fname", attr)
}
@BeforeEach
fun configureImplicitWait() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
}
}
Java e C#
As classes WebDriver, WebElement e ShadowRoot todas implementam o SearchContext interface, que é
considerada uma role-based interface(interface baseada em função). As interfaces baseadas em função permitem determinar se uma determinada
implementação de driver suporta um recurso específico. Essas interfaces são claramente definidas e tentam
aderir a ter apenas um único papel de responsabilidade.
Evaluating the Shadow DOM
The Shadow DOM is an encapsulated DOM tree hidden inside an element. With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree with easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater.
WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host"));
SearchContext shadowRoot = shadowHost.getShadowRoot();
WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content")); plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
var shadowRoot = shadowHost.GetShadowRoot();
var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content"));shadow_host = @driver.find_element(css: '#shadow_host')
shadow_root = shadow_host.shadow_root
shadow_content = shadow_root.find_element(css: '#shadow_content')Localizador otimizado
Uma pesquisa aninhada pode não ser a estratégia de localização mais eficaz, pois requer dois comandos separados a serem emitidos para o navegador.
Para melhorar um pouco o desempenho, podemos usar CSS ou XPath para encontrar esse elemento com um único comando. Veja as sugestões de estratégia do localizador na nossa sessão de Práticas de teste incentivadas.
Para esse exemplo, utilizaremos um seletor CSS:
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));/examples/java/src/test/java/dev/selenium/elements/FindersTest.java
package dev.selenium.elements;
import dev.selenium.BaseTest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FindersTest extends BaseTest {
private static final String LOCATORS_PAGE =
"https://www.selenium.dev/selenium/web/locators_tests/locators.html";
@Test
public void findsFirstMatchingElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));
assertEquals("fname", firstInput.getAttribute("id"));
}
@Test
public void findsElementWithinASubsetOfTheDom() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void usesAnOptimizedLocator() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void findsAllMatchingElements() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));
assertTrue(inputs.size() > 1);
}
@Test
public void getsElementFromACollection() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
assertTrue(elements.size() > 0);
}
@Test
public void findsElementsFromElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}
assertTrue(elements.size() > 0);
}
@Test
public void getsActiveElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");
assertEquals("fname", attr);
}
}
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
namespace SeleniumDocs.Elements
{
[TestClass]
public class FindersTest : BaseTest
{
private const string LocatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html";
[TestMethod]
public void FindsFirstMatchingElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", firstInput.GetAttribute("id"));
}
[TestMethod]
public void FindsElementWithinASubsetOfTheDom()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void UsesAnOptimizedLocator()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void FindsAllMatchingElements()
{
StartDriver();
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));
Assert.IsTrue(inputs.Count > 1);
}
[TestMethod]
public void GetsElementFromACollection()
{
StartDriver();
driver.Url = LocatorsPage;
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void FindsElementsFromElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void GetsActiveElement()
{
StartDriver();
driver.Url = LocatorsPage;
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
Assert.AreEqual("fname", attr);
}
}
}
# rubocop:disable RSpec/Output/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
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
end
end
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));/examples/javascript/test/elements/finders.spec.js
const {Builder, By} = require('selenium-webdriver');
const assert = require('assert');
const LOCATORS_PAGE = 'https://www.selenium.dev/selenium/web/locators_tests/locators.html';
describe('Finders', function () {
it('finds the first matching element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));
assert.equal(await firstInput.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds an element within a subset of the DOM', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('uses an optimized locator', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds all matching elements', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));
assert.ok(inputs.length > 1);
await driver.quit();
});
it('gets an element from a collection', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('finds elements from an element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('gets the active element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');
assert.equal(attr, 'fname');
await driver.quit();
});
});
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt
package dev.selenium.elements
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.openqa.selenium.By
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FindersTest : BaseTest() {
private val locatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
@Test
fun findsFirstMatchingElement() {
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))
assertEquals("fname", firstInput.getAttribute("id"))
}
@Test
fun findsElementWithinASubsetOfTheDom() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun usesAnOptimizedLocator() {
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun findsAllMatchingElements() {
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))
assertTrue(inputs.size > 1)
}
@Test
fun getsElementFromACollection() {
driver.get(locatorsPage)
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}
assertTrue(elements.isNotEmpty())
}
@Test
fun findsElementsFromElement() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}
assertTrue(elements.isNotEmpty())
}
@Test
fun getsActiveElement() {
driver.get(locatorsPage)
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")
assertEquals("fname", attr)
}
@BeforeEach
fun configureImplicitWait() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
}
}
Todos os elementos correspondentes
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 elementos input serão devolvidas em uma coleção.
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));/examples/java/src/test/java/dev/selenium/elements/FindersTest.java
package dev.selenium.elements;
import dev.selenium.BaseTest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FindersTest extends BaseTest {
private static final String LOCATORS_PAGE =
"https://www.selenium.dev/selenium/web/locators_tests/locators.html";
@Test
public void findsFirstMatchingElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));
assertEquals("fname", firstInput.getAttribute("id"));
}
@Test
public void findsElementWithinASubsetOfTheDom() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void usesAnOptimizedLocator() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void findsAllMatchingElements() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));
assertTrue(inputs.size() > 1);
}
@Test
public void getsElementFromACollection() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
assertTrue(elements.size() > 0);
}
@Test
public void findsElementsFromElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}
assertTrue(elements.size() > 0);
}
@Test
public void getsActiveElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");
assertEquals("fname", attr);
}
}
fruit = fruits.find_element(By.CLASS_NAME, 'tomatoes')
/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
namespace SeleniumDocs.Elements
{
[TestClass]
public class FindersTest : BaseTest
{
private const string LocatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html";
[TestMethod]
public void FindsFirstMatchingElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", firstInput.GetAttribute("id"));
}
[TestMethod]
public void FindsElementWithinASubsetOfTheDom()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void UsesAnOptimizedLocator()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void FindsAllMatchingElements()
{
StartDriver();
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));
Assert.IsTrue(inputs.Count > 1);
}
[TestMethod]
public void GetsElementFromACollection()
{
StartDriver();
driver.Url = LocatorsPage;
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void FindsElementsFromElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void GetsActiveElement()
{
StartDriver();
driver.Url = LocatorsPage;
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
Assert.AreEqual("fname", attr);
}
}
}
it 'finds element from element' do
element = driver.find_element(:tag_name, 'div')/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
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
end
end
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));/examples/javascript/test/elements/finders.spec.js
const {Builder, By} = require('selenium-webdriver');
const assert = require('assert');
const LOCATORS_PAGE = 'https://www.selenium.dev/selenium/web/locators_tests/locators.html';
describe('Finders', function () {
it('finds the first matching element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));
assert.equal(await firstInput.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds an element within a subset of the DOM', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('uses an optimized locator', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds all matching elements', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));
assert.ok(inputs.length > 1);
await driver.quit();
});
it('gets an element from a collection', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('finds elements from an element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('gets the active element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');
assert.equal(attr, 'fname');
await driver.quit();
});
});
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt
package dev.selenium.elements
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.openqa.selenium.By
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FindersTest : BaseTest() {
private val locatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
@Test
fun findsFirstMatchingElement() {
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))
assertEquals("fname", firstInput.getAttribute("id"))
}
@Test
fun findsElementWithinASubsetOfTheDom() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun usesAnOptimizedLocator() {
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun findsAllMatchingElements() {
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))
assertTrue(inputs.size > 1)
}
@Test
fun getsElementFromACollection() {
driver.get(locatorsPage)
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}
assertTrue(elements.isNotEmpty())
}
@Test
fun findsElementsFromElement() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}
assertTrue(elements.isNotEmpty())
}
@Test
fun getsActiveElement() {
driver.get(locatorsPage)
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")
assertEquals("fname", attr)
}
@BeforeEach
fun configureImplicitWait() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
}
}
Obter Elemento
Muitas vezes você obterá uma coleção de elementos, mas quer trabalhar apenas com um elemento específico, o que significa que você precisa iterar sobre a coleção e identificar o que você deseja.
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}/examples/java/src/test/java/dev/selenium/elements/FindersTest.java
package dev.selenium.elements;
import dev.selenium.BaseTest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FindersTest extends BaseTest {
private static final String LOCATORS_PAGE =
"https://www.selenium.dev/selenium/web/locators_tests/locators.html";
@Test
public void findsFirstMatchingElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));
assertEquals("fname", firstInput.getAttribute("id"));
}
@Test
public void findsElementWithinASubsetOfTheDom() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void usesAnOptimizedLocator() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void findsAllMatchingElements() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));
assertTrue(inputs.size() > 1);
}
@Test
public void getsElementFromACollection() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
assertTrue(elements.size() > 0);
}
@Test
public void findsElementsFromElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}
assertTrue(elements.size() > 0);
}
@Test
public void getsActiveElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");
assertEquals("fname", attr);
}
}
assert shadow_host.is_displayed()
assert shadow_content.is_displayed()/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
namespace SeleniumDocs.Elements
{
[TestClass]
public class FindersTest : BaseTest
{
private const string LocatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html";
[TestMethod]
public void FindsFirstMatchingElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", firstInput.GetAttribute("id"));
}
[TestMethod]
public void FindsElementWithinASubsetOfTheDom()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void UsesAnOptimizedLocator()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void FindsAllMatchingElements()
{
StartDriver();
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));
Assert.IsTrue(inputs.Count > 1);
}
[TestMethod]
public void GetsElementFromACollection()
{
StartDriver();
driver.Url = LocatorsPage;
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void FindsElementsFromElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void GetsActiveElement()
{
StartDriver();
driver.Url = LocatorsPage;
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
Assert.AreEqual("fname", attr);
}
}
}
driver.find_element(css: '[name="q"]').send_keys('webElement')
driver.switch_to.active_element.attribute('title')
end/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
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
end
end
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}/examples/javascript/test/elements/finders.spec.js
const {Builder, By} = require('selenium-webdriver');
const assert = require('assert');
const LOCATORS_PAGE = 'https://www.selenium.dev/selenium/web/locators_tests/locators.html';
describe('Finders', function () {
it('finds the first matching element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));
assert.equal(await firstInput.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds an element within a subset of the DOM', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('uses an optimized locator', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds all matching elements', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));
assert.ok(inputs.length > 1);
await driver.quit();
});
it('gets an element from a collection', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('finds elements from an element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('gets the active element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');
assert.equal(attr, 'fname');
await driver.quit();
});
});
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt
package dev.selenium.elements
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.openqa.selenium.By
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FindersTest : BaseTest() {
private val locatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
@Test
fun findsFirstMatchingElement() {
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))
assertEquals("fname", firstInput.getAttribute("id"))
}
@Test
fun findsElementWithinASubsetOfTheDom() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun usesAnOptimizedLocator() {
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun findsAllMatchingElements() {
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))
assertTrue(inputs.size > 1)
}
@Test
fun getsElementFromACollection() {
driver.get(locatorsPage)
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}
assertTrue(elements.isNotEmpty())
}
@Test
fun findsElementsFromElement() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}
assertTrue(elements.isNotEmpty())
}
@Test
fun getsActiveElement() {
driver.get(locatorsPage)
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")
assertEquals("fname", attr)
}
@BeforeEach
fun configureImplicitWait() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
}
}
Localizar Elementos em um Elemento
Ele é usado para localizar a lista de WebElements filhos correspondentes dentro do contexto do elemento pai. Para realizar isso, o WebElement pai é encadeado com o ‘findElements’ para acessar seus elementos filhos.
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}/examples/java/src/test/java/dev/selenium/elements/FindersTest.java
package dev.selenium.elements;
import dev.selenium.BaseTest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FindersTest extends BaseTest {
private static final String LOCATORS_PAGE =
"https://www.selenium.dev/selenium/web/locators_tests/locators.html";
@Test
public void findsFirstMatchingElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));
assertEquals("fname", firstInput.getAttribute("id"));
}
@Test
public void findsElementWithinASubsetOfTheDom() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void usesAnOptimizedLocator() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void findsAllMatchingElements() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));
assertTrue(inputs.size() > 1);
}
@Test
public void getsElementFromACollection() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
assertTrue(elements.size() > 0);
}
@Test
public void findsElementsFromElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}
assertTrue(elements.size() > 0);
}
@Test
public void getsActiveElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");
assertEquals("fname", attr);
}
}
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
namespace SeleniumDocs.Elements
{
[TestClass]
public class FindersTest : BaseTest
{
private const string LocatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html";
[TestMethod]
public void FindsFirstMatchingElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", firstInput.GetAttribute("id"));
}
[TestMethod]
public void FindsElementWithinASubsetOfTheDom()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void UsesAnOptimizedLocator()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void FindsAllMatchingElements()
{
StartDriver();
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));
Assert.IsTrue(inputs.Count > 1);
}
[TestMethod]
public void GetsElementFromACollection()
{
StartDriver();
driver.Url = LocatorsPage;
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void FindsElementsFromElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void GetsActiveElement()
{
StartDriver();
driver.Url = LocatorsPage;
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
Assert.AreEqual("fname", attr);
}
}
}
/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
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
end
end
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}/examples/javascript/test/elements/finders.spec.js
const {Builder, By} = require('selenium-webdriver');
const assert = require('assert');
const LOCATORS_PAGE = 'https://www.selenium.dev/selenium/web/locators_tests/locators.html';
describe('Finders', function () {
it('finds the first matching element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));
assert.equal(await firstInput.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds an element within a subset of the DOM', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('uses an optimized locator', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds all matching elements', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));
assert.ok(inputs.length > 1);
await driver.quit();
});
it('gets an element from a collection', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('finds elements from an element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('gets the active element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');
assert.equal(attr, 'fname');
await driver.quit();
});
});
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt
package dev.selenium.elements
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.openqa.selenium.By
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FindersTest : BaseTest() {
private val locatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
@Test
fun findsFirstMatchingElement() {
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))
assertEquals("fname", firstInput.getAttribute("id"))
}
@Test
fun findsElementWithinASubsetOfTheDom() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun usesAnOptimizedLocator() {
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun findsAllMatchingElements() {
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))
assertTrue(inputs.size > 1)
}
@Test
fun getsElementFromACollection() {
driver.get(locatorsPage)
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}
assertTrue(elements.isNotEmpty())
}
@Test
fun findsElementsFromElement() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}
assertTrue(elements.isNotEmpty())
}
@Test
fun getsActiveElement() {
driver.get(locatorsPage)
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")
assertEquals("fname", attr)
}
@BeforeEach
fun configureImplicitWait() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
}
}
Obter elemento ativo
Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no contexto de navegação atual.
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");/examples/java/src/test/java/dev/selenium/elements/FindersTest.java
package dev.selenium.elements;
import dev.selenium.BaseTest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FindersTest extends BaseTest {
private static final String LOCATORS_PAGE =
"https://www.selenium.dev/selenium/web/locators_tests/locators.html";
@Test
public void findsFirstMatchingElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement firstInput = driver.findElement(By.className("information"));
assertEquals("fname", firstInput.getAttribute("id"));
}
@Test
public void findsElementWithinASubsetOfTheDom() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
WebElement input = form.findElement(By.className("information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void usesAnOptimizedLocator() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement input = driver.findElement(By.cssSelector("form .information"));
assertEquals("fname", input.getAttribute("id"));
}
@Test
public void findsAllMatchingElements() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> inputs = driver.findElements(By.tagName("input"));
assertTrue(inputs.size() > 1);
}
@Test
public void getsElementFromACollection() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
List<WebElement> elements = driver.findElements(By.tagName("p"));
for (WebElement element : elements) {
System.out.println("Paragraph text:" + element.getText());
}
assertTrue(elements.size() > 0);
}
@Test
public void findsElementsFromElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
WebElement form = driver.findElement(By.tagName("form"));
List<WebElement> elements = form.findElements(By.tagName("input"));
for (WebElement e : elements) {
System.out.println(e.getAttribute("value"));
}
assertTrue(elements.size() > 0);
}
@Test
public void getsActiveElement() {
startChromeDriver();
driver.get(LOCATORS_PAGE);
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement");
String attr = driver.switchTo().activeElement().getAttribute("name");
assertEquals("fname", attr);
}
}
driver = webdriver.Chrome()
driver.get('https://www.example.com')/examples/python/tests/elements/test_finders.py
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:
#
# <ol id="vegetables">
# <li class="potatoes">…
# <li class="onions">…
# <li class="tomatoes"><span>Tomato is a Vegetable</span>…
# </ol>
# <ul id="fruits">
# <li class="bananas">…
# <li class="apples">…
# <li class="tomatoes"><span>Tomato is a Fruit</span>…
# </ul>
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_basic_finders(driver):
vegetable = driver.find_element(By.CLASS_NAME, 'tomatoes')
@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')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_optimized_locator(driver):
fruit = driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
@pytest.mark.skip(reason="illustrative example, not an executable test")
def test_all_matching_elements(driver):
plants = driver.find_elements(By.TAG_NAME, 'li')
def test_evaluating_shadow_dom():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html')
shadow_host = driver.find_element(By.TAG_NAME, 'custom-checkbox-element')
shadow_root = shadow_host.shadow_root
assert shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, 'input[type=checkbox]')
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')
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(element.text)
assert len(elements) > 0
driver.quit()
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)
assert len(elements) > 0
driver.quit()
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')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'my-text'
driver.quit()
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
namespace SeleniumDocs.Elements
{
[TestClass]
public class FindersTest : BaseTest
{
private const string LocatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html";
[TestMethod]
public void FindsFirstMatchingElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement firstInput = driver.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", firstInput.GetAttribute("id"));
}
[TestMethod]
public void FindsElementWithinASubsetOfTheDom()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
IWebElement input = form.FindElement(By.ClassName("information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void UsesAnOptimizedLocator()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement input = driver.FindElement(By.CssSelector("form .information"));
Assert.AreEqual("fname", input.GetAttribute("id"));
}
[TestMethod]
public void FindsAllMatchingElements()
{
StartDriver();
driver.Url = LocatorsPage;
var inputs = driver.FindElements(By.TagName("input"));
Assert.IsTrue(inputs.Count > 1);
}
[TestMethod]
public void GetsElementFromACollection()
{
StartDriver();
driver.Url = LocatorsPage;
var elements = driver.FindElements(By.TagName("p"));
foreach (var element in elements)
{
System.Console.WriteLine("Paragraph text:" + element.Text);
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void FindsElementsFromElement()
{
StartDriver();
driver.Url = LocatorsPage;
IWebElement form = driver.FindElement(By.TagName("form"));
var elements = form.FindElements(By.TagName("input"));
foreach (var e in elements)
{
System.Console.WriteLine(e.GetAttribute("value"));
}
Assert.IsTrue(elements.Count > 0);
}
[TestMethod]
public void GetsActiveElement()
{
StartDriver();
driver.Url = LocatorsPage;
driver.FindElement(By.CssSelector("#fname")).SendKeys("webElement");
string attr = driver.SwitchTo().ActiveElement().GetAttribute("name");
Assert.AreEqual("fname", attr);
}
}
}
/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
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
end
end
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');/examples/javascript/test/elements/finders.spec.js
const {Builder, By} = require('selenium-webdriver');
const assert = require('assert');
const LOCATORS_PAGE = 'https://www.selenium.dev/selenium/web/locators_tests/locators.html';
describe('Finders', function () {
it('finds the first matching element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const firstInput = await driver.findElement(By.className('information'));
assert.equal(await firstInput.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds an element within a subset of the DOM', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.tagName('form'));
const input = await form.findElement(By.className('information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('uses an optimized locator', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const input = await driver.findElement(By.css('form .information'));
assert.equal(await input.getAttribute('id'), 'fname');
await driver.quit();
});
it('finds all matching elements', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const inputs = await driver.findElements(By.tagName('input'));
assert.ok(inputs.length > 1);
await driver.quit();
});
it('gets an element from a collection', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const elements = await driver.findElements(By.tagName('p'));
for (const element of elements) {
console.log('Paragraph text:' + await element.getText());
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('finds elements from an element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
const form = await driver.findElement(By.css('form'));
const elements = await form.findElements(By.css('input'));
for (const e of elements) {
console.log(await e.getAttribute('value'));
}
assert.ok(elements.length > 0);
await driver.quit();
});
it('gets the active element', async function () {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get(LOCATORS_PAGE);
await driver.findElement(By.css('#fname')).sendKeys('webElement');
const attr = await driver.switchTo().activeElement().getAttribute('name');
assert.equal(attr, 'fname');
await driver.quit();
});
});
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt
package dev.selenium.elements
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.openqa.selenium.By
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FindersTest : BaseTest() {
private val locatorsPage = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
@Test
fun findsFirstMatchingElement() {
driver.get(locatorsPage)
val firstInput = driver.findElement(By.className("information"))
assertEquals("fname", firstInput.getAttribute("id"))
}
@Test
fun findsElementWithinASubsetOfTheDom() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val input = form.findElement(By.className("information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun usesAnOptimizedLocator() {
driver.get(locatorsPage)
val input = driver.findElement(By.cssSelector("form .information"))
assertEquals("fname", input.getAttribute("id"))
}
@Test
fun findsAllMatchingElements() {
driver.get(locatorsPage)
val inputs = driver.findElements(By.tagName("input"))
assertTrue(inputs.size > 1)
}
@Test
fun getsElementFromACollection() {
driver.get(locatorsPage)
val elements = driver.findElements(By.tagName("p"))
for (element in elements) {
println("Paragraph text:" + element.text)
}
assertTrue(elements.isNotEmpty())
}
@Test
fun findsElementsFromElement() {
driver.get(locatorsPage)
val form = driver.findElement(By.tagName("form"))
val elements = form.findElements(By.tagName("input"))
for (e in elements) {
println(e.getAttribute("value"))
}
assertTrue(elements.isNotEmpty())
}
@Test
fun getsActiveElement() {
driver.get(locatorsPage)
driver.findElement(By.cssSelector("#fname")).sendKeys("webElement")
val attr = driver.switchTo().activeElement().getAttribute("name")
assertEquals("fname", attr)
}
@BeforeEach
fun configureImplicitWait() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
}
}




