查询网络元素
使用 Selenium 最基本的特点之一是获取可用于操作的元素引用。 Selenium 提供了许多内置的 定位策略,用于唯一标识元素。 在更复杂的场景中,可以用多种方式使用这些定位器。为了本篇文档的目的, 请使用 Selenium 定位器测试页面。
第一个匹配的元素
许多定位器会匹配页面上的多个元素。 单个的 find element 方法会返回在给定上下文中找到的第一个元素的引用。
在整个 DOM 中查找
当在 driver 实例上调用 find element 方法时,
它会返回 DOM 中与所提供定位器匹配的第一个元素的引用。
该引用可以被保存并用于后续的元素操作。
在 Selenium 定位器测试页面上,有两个 class 名称为 information 的元素,
因此此方法会返回第一个文本输入框。
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);
}
}
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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.navigate.to locators_page
first_input = driver.find_element(class: 'information')/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
it 'finds the first matching element' do
driver.navigate.to locators_page
first_input = driver.find_element(class: 'information')
expect(first_input.attribute('id')).to eq('fname')
end
it 'uses a subset of the dom to find an element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'uses an optimized locator' do
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'finds all matching elements' do
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')
expect(inputs.size).to be > 1
end
# rubocop:disable RSpec/Output
it 'gets an element from a collection' do
driver.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }
expect(elements).not_to be_empty
end
it 'finds element from element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }
expect(elements).not_to be_empty
end
# rubocop:enable RSpec/Output
it 'finds the active element' do
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')
expect(attr).to eq('fname')
end
end
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))
}
}
在 DOM 的子集内评估
与其在整个 DOM 中寻找唯一的定位器, 通常更有用的是将搜索范围缩小到另一个已定位元素的作用域内。
一种解决办法是先定位目标元素的祖先,
然后在该对象上调用 find element:
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);
}
}
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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);
}
}
}
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
it 'finds the first matching element' do
driver.navigate.to locators_page
first_input = driver.find_element(class: 'information')
expect(first_input.attribute('id')).to eq('fname')
end
it 'uses a subset of the dom to find an element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'uses an optimized locator' do
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'finds all matching elements' do
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')
expect(inputs.size).to be > 1
end
# rubocop:disable RSpec/Output
it 'gets an element from a collection' do
driver.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }
expect(elements).not_to be_empty
end
it 'finds element from element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }
expect(elements).not_to be_empty
end
# rubocop:enable RSpec/Output
it 'finds the active element' do
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')
expect(attr).to eq('fname')
end
end
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 和 C#WebDriver、WebElement 和 ShadowRoot 类都实现了 SearchContext 接口,
该接口被视为一种 基于角色的接口。基于角色的接口可以让你判断特定的驱动实现是否支持某项功能。
这些接口定义清晰,并尽量遵循单一职责原则。
评估 Shadow DOM
Shadow DOM 是隐藏在元素内部的封装 DOM 树。
自 Chromium 浏览器在 v96 发布后,Selenium 已支持通过易用的 shadow root 方法访问该树。注意:这些方法需要 Selenium 4.0 或更高版本。
WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host"));
SearchContext shadowRoot = shadowHost.getShadowRoot();
WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content")); 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]')/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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')优化后的定位器
嵌套查找可能不是最有效的定位策略, 因为它需要向浏览器发送两次独立的命令。
为略微提升性能,我们可以使用 CSS 或 XPath,在一次命令中定位到该元素。 请参阅本节中关于定位策略建议的说明 以及推荐的测试实践。
在本例中,我们将使用 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);
}
}
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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);
}
}
}
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
it 'finds the first matching element' do
driver.navigate.to locators_page
first_input = driver.find_element(class: 'information')
expect(first_input.attribute('id')).to eq('fname')
end
it 'uses a subset of the dom to find an element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'uses an optimized locator' do
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'finds all matching elements' do
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')
expect(inputs.size).to be > 1
end
# rubocop:disable RSpec/Output
it 'gets an element from a collection' do
driver.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }
expect(elements).not_to be_empty
end
it 'finds element from element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }
expect(elements).not_to be_empty
end
# rubocop:enable RSpec/Output
it 'finds the active element' do
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')
expect(attr).to eq('fname')
end
end
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))
}
}
所有匹配的元素
在某些情况下,需要获取与定位器匹配的所有元素的引用,而不是仅获取第一个。
复数形式的 find elements 方法会返回一组元素引用。如果没有匹配项,则返回空列表。
在本例中,将返回所有 input 元素的引用集合。
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);
}
}
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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);
}
}
}
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
it 'finds the first matching element' do
driver.navigate.to locators_page
first_input = driver.find_element(class: 'information')
expect(first_input.attribute('id')).to eq('fname')
end
it 'uses a subset of the dom to find an element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'uses an optimized locator' do
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'finds all matching elements' do
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')
expect(inputs.size).to be > 1
end
# rubocop:disable RSpec/Output
it 'gets an element from a collection' do
driver.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }
expect(elements).not_to be_empty
end
it 'finds element from element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }
expect(elements).not_to be_empty
end
# rubocop:enable RSpec/Output
it 'finds the active element' do
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')
expect(attr).to eq('fname')
end
end
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))
}
}
获取元素
有时你会得到一组元素,但想操作其中某个特定元素, 这意味着需要遍历该集合并找到目标元素。
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);
}
}
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
it 'finds the first matching element' do
driver.navigate.to locators_page
first_input = driver.find_element(class: 'information')
expect(first_input.attribute('id')).to eq('fname')
end
it 'uses a subset of the dom to find an element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'uses an optimized locator' do
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'finds all matching elements' do
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')
expect(inputs.size).to be > 1
end
# rubocop:disable RSpec/Output
it 'gets an element from a collection' do
driver.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }
expect(elements).not_to be_empty
end
it 'finds element from element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }
expect(elements).not_to be_empty
end
# rubocop:enable RSpec/Output
it 'finds the active element' do
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')
expect(attr).to eq('fname')
end
end
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))
}
}
从元素查找子元素
用于在父元素的上下文中查找匹配的子 WebElement 列表。
为此,可在父 WebElement 上链式调用 findElements 来访问子元素。
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);
}
}
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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);
}
}
}
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
it 'finds the first matching element' do
driver.navigate.to locators_page
first_input = driver.find_element(class: 'information')
expect(first_input.attribute('id')).to eq('fname')
end
it 'uses a subset of the dom to find an element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'uses an optimized locator' do
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'finds all matching elements' do
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')
expect(inputs.size).to be > 1
end
# rubocop:disable RSpec/Output
it 'gets an element from a collection' do
driver.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }
expect(elements).not_to be_empty
end
it 'finds element from element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }
expect(elements).not_to be_empty
end
# rubocop:enable RSpec/Output
it 'finds the active element' do
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')
expect(attr).to eq('fname')
end
end
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))
}
}
获取活动元素
用于跟踪或查找当前浏览上下文中具有焦点的 DOM 元素。
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.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')/examples/python/tests/elements/test_finders.py
from selenium.webdriver.common.by import By
LOCATORS_PAGE = "https://www.selenium.dev/selenium/web/locators_tests/locators.html"
def test_first_matching_element(driver):
driver.get(LOCATORS_PAGE)
first_input = driver.find_element(By.CLASS_NAME, "information")
assert first_input.get_attribute("id") == "fname"
def test_subset_of_dom(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, "form")
input_element = form.find_element(By.CLASS_NAME, "information")
assert input_element.get_attribute("id") == "fname"
def test_optimized_locator(driver):
driver.get(LOCATORS_PAGE)
input_element = driver.find_element(By.CSS_SELECTOR, "form .information")
assert input_element.get_attribute("id") == "fname"
def test_all_matching_elements(driver):
driver.get(LOCATORS_PAGE)
inputs = driver.find_elements(By.TAG_NAME, "input")
assert len(inputs) > 1
def test_evaluating_shadow_dom(driver):
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()
def test_get_element(driver):
driver.get(LOCATORS_PAGE)
elements = driver.find_elements(By.TAG_NAME, 'p')
for element in elements:
print(f"Paragraph text:{element.text}")
assert len(elements) > 0
def test_find_elements_from_element(driver):
driver.get(LOCATORS_PAGE)
form = driver.find_element(By.TAG_NAME, 'form')
elements = form.find_elements(By.TAG_NAME, 'input')
for element in elements:
print(element.get_attribute('value'))
assert len(elements) > 0
def test_get_active_element(driver):
driver.get(LOCATORS_PAGE)
driver.find_element(By.CSS_SELECTOR, '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.get_attribute('name')
assert attr == 'fname'
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);
}
}
}
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')/examples/ruby/spec/elements/finders_spec.rb
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Element Finders' do
let(:driver) { start_session }
let(:locators_page) { 'https://www.selenium.dev/selenium/web/locators_tests/locators.html' }
it 'finds the first matching element' do
driver.navigate.to locators_page
first_input = driver.find_element(class: 'information')
expect(first_input.attribute('id')).to eq('fname')
end
it 'uses a subset of the dom to find an element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
input_element = form.find_element(class: 'information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'uses an optimized locator' do
driver.navigate.to locators_page
input_element = driver.find_element(css: 'form .information')
expect(input_element.attribute('id')).to eq('fname')
end
it 'finds all matching elements' do
driver.navigate.to locators_page
inputs = driver.find_elements(tag_name: 'input')
expect(inputs.size).to be > 1
end
# rubocop:disable RSpec/Output
it 'gets an element from a collection' do
driver.navigate.to locators_page
elements = driver.find_elements(tag_name: 'p')
elements.each { |e| puts "Paragraph text:#{e.text}" }
expect(elements).not_to be_empty
end
it 'finds element from element' do
driver.navigate.to locators_page
form = driver.find_element(tag_name: 'form')
elements = form.find_elements(tag_name: 'input')
elements.each { |e| puts e.attribute('value') }
expect(elements).not_to be_empty
end
# rubocop:enable RSpec/Output
it 'finds the active element' do
driver.navigate.to locators_page
driver.find_element(css: '#fname').send_keys('webElement')
attr = driver.switch_to.active_element.attribute('name')
expect(attr).to eq('fname')
end
end
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))
}
}




