Web元素交互

用于操纵表单的高级指令集.

仅有五种基本命令可用于元素的操作:

  • 点击 (适用于任何元素)
  • 发送键位 (仅适用于文本字段和内容可编辑元素)
  • 清除 (仅适用于文本字段和内容可编辑元素)
  • 提交 (仅适用于表单元素)
  • 选择 (参见 选择列表元素)

附加验证

这些方法的设计目的是尽量模拟用户体验, 所以, 与 Actions接口 不同, 在指定制定操作之前, 会尝试执行两件事.

  1. 如果它确定元素在视口之外, 则会将元素滚动到视图中, 特别是将元素底部与视口底部对齐.
  2. 确保元素在执行操作之前是可交互的 . 这可能意味着滚动不成功, 或者该元素没有以其他方式显示.
    确定某个元素是否显示在页面上太难了 无法直接在webdriver规范中定义, 因此Selenium发送一个带有JavaScript原子的执行命令, 检查是否有可能阻止该元素显示. 如果确定某个元素不在视口中, 不显示, 不可 键盘交互, 或不可 指针交互, 则返回一个元素不可交互 错误.

点击

元素点击命令 执行在 元素中央. 如果元素中央由于某些原因被 遮挡 , Selenium将返回一个 元素点击中断 错误.

        driver.get("https://www.selenium.dev/selenium/web/inputs.html");

	    // Click on the element 
        WebElement checkInput=driver.findElement(By.name("checkbox_input"));
        checkInput.click();
Show full example
package dev.selenium.elements;

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class InteractionTest{

    @Test
    public void interactWithElements() {
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
        // Navigate to Url
        driver.get("https://www.selenium.dev/selenium/web/inputs.html");

	    // Click on the element 
        WebElement checkInput=driver.findElement(By.name("checkbox_input"));
        checkInput.click();
        Boolean isChecked=checkInput.isSelected();
        assertEquals(isChecked,false);

        //SendKeys
        // Clear field to empty it from any previous data
        WebElement emailInput=driver.findElement(By.name("email_input"));
        emailInput.clear();
	    //Enter Text
        String email="admin@localhost.dev";
	    emailInput.sendKeys(email);
        //Verify
        String data=emailInput.getAttribute("value");
        assertEquals(data,email);


        //Clear Element
        // Clear field to empty it from any previous data
        emailInput.clear();
        data=emailInput.getAttribute("value");
        assertEquals(data, ""); 

        driver.quit();
    }

}
    # Navigate to URL
    driver.get("https://www.selenium.dev/selenium/web/inputs.html")

    # Click on the checkbox
    check_input = driver.find_element(By.NAME, "checkbox_input")
    check_input.click()
Show full example
from selenium import webdriver
from selenium.webdriver.common.by import By

import pytest


def test_interactions():
    # Initialize WebDriver
    driver = webdriver.Chrome()
    driver.implicitly_wait(0.5)

    # Navigate to URL
    driver.get("https://www.selenium.dev/selenium/web/inputs.html")

    # Click on the checkbox
    check_input = driver.find_element(By.NAME, "checkbox_input")
    check_input.click()

    is_checked = check_input.is_selected()
    assert is_checked == False

    # Handle the email input field
    email_input = driver.find_element(By.NAME, "email_input")
    email_input.clear()  # Clear field
    
    email = "admin@localhost.dev"
    email_input.send_keys(email)  # Enter text

    # Verify input
    data = email_input.get_attribute("value")
    assert data == email

    # Clear the email input field again
    email_input.clear()
    data = email_input.get_attribute("value")
    assert data == ""

    # Quit the driver
    driver.quit()
            // Navigate to Url
	            driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
	            // Click on the element 
	            IWebElement checkInput = driver.FindElement(By.Name("checkbox_input"));
	            checkInput.Click();
Show full example
using System;
	using Microsoft.VisualStudio.TestTools.UnitTesting;
	using OpenQA.Selenium;
	using OpenQA.Selenium.Chrome;
	
	namespace SeleniumDocs.Elements
	{
	    [TestClass]
	    public class InteractionTest
	    {
	        [TestMethod]
	        public void TestInteractionCommands()
	        {
	            IWebDriver driver = new ChromeDriver();
	            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
	
	            // Navigate to Url
	            driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
	            // Click on the element 
	            IWebElement checkInput = driver.FindElement(By.Name("checkbox_input"));
	            checkInput.Click();
	
	            //Verify
	            Boolean isChecked = checkInput.Selected;
	            Assert.AreEqual(isChecked, false);
	
	            //SendKeys
	            // Clear field to empty it from any previous data
	            IWebElement emailInput = driver.FindElement(By.Name("email_input"));
	            emailInput.Clear();
	            //Enter Text
	            String email = "admin@localhost.dev";
	            emailInput.SendKeys(email);
	
	            //Verify
	            String data = emailInput.GetAttribute("value");
	            Assert.AreEqual(data, email);
	
	
	            //Clear Element
	            // Clear field to empty it from any previous data
	            emailInput.Clear();
	            data = emailInput.GetAttribute("value");
	            
	            //Verify
	            Assert.AreEqual(data, "");
	
	            //Quit the browser
	            driver.Quit();
	        }
	    }
	}
    driver.find_element(name: 'color_input').click
Show full example
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Element Interaction' do
  let(:driver) { start_session }

  before { driver.get 'https://www.selenium.dev/selenium/web/inputs.html' }

  it 'clicks an element' do
    driver.find_element(name: 'color_input').click
  end

  it 'clears and send keys to an element' do
    driver.find_element(name: 'email_input').clear
    driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
  end
end
    await submitButton.click();
Show full example
const {By, Builder, Browser} = require('selenium-webdriver');
  const assert = require("assert");
  
  (async function firstTest() {
    let driver;
    
    try {
      driver = await new Builder().forBrowser(Browser.CHROME).build();
      await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
    
      let title = await driver.getTitle();
      assert.equal("Web form", title);
    
      await driver.manage().setTimeouts({implicit: 500});
    
      let textBox = await driver.findElement(By.name('my-text'));
      let submitButton = await driver.findElement(By.css('button'));
    
      await textBox.sendKeys('Selenium');
      await submitButton.click();
    
      let message = await driver.findElement(By.id('message'));
      let value = await message.getText();
      assert.equal("Received!", value);
    } catch (e) {
      console.log(e)
    } finally {
      await driver.quit();
    }
  }())
  
    // Navigate to Url
    driver.get("https://www.selenium.dev/selenium/web/inputs.html")

    // Click the element
    driver.findElement(By.name("color_input")).click();
  
  

发送键位

元素发送键位命令 将录入提供的键位到 可编辑的 元素. 通常, 这意味着元素是具有 文本 类型的表单的输入元素或具有 内容可编辑 属性的元素. 如果不可编辑, 则返回 无效元素状态 错误.

以下 是WebDriver支持的按键列表.

        // Clear field to empty it from any previous data
        WebElement emailInput=driver.findElement(By.name("email_input"));
        emailInput.clear();
	    //Enter Text
        String email="admin@localhost.dev";
	    emailInput.sendKeys(email);
Show full example
package dev.selenium.elements;

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class InteractionTest{

    @Test
    public void interactWithElements() {
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
        // Navigate to Url
        driver.get("https://www.selenium.dev/selenium/web/inputs.html");

	    // Click on the element 
        WebElement checkInput=driver.findElement(By.name("checkbox_input"));
        checkInput.click();
        Boolean isChecked=checkInput.isSelected();
        assertEquals(isChecked,false);

        //SendKeys
        // Clear field to empty it from any previous data
        WebElement emailInput=driver.findElement(By.name("email_input"));
        emailInput.clear();
	    //Enter Text
        String email="admin@localhost.dev";
	    emailInput.sendKeys(email);
        //Verify
        String data=emailInput.getAttribute("value");
        assertEquals(data,email);


        //Clear Element
        // Clear field to empty it from any previous data
        emailInput.clear();
        data=emailInput.getAttribute("value");
        assertEquals(data, ""); 

        driver.quit();
    }

}
    # Handle the email input field
    email_input = driver.find_element(By.NAME, "email_input")
    email_input.clear()  # Clear field
    
    email = "admin@localhost.dev"
    email_input.send_keys(email)  # Enter text
Show full example
from selenium import webdriver
from selenium.webdriver.common.by import By

import pytest


def test_interactions():
    # Initialize WebDriver
    driver = webdriver.Chrome()
    driver.implicitly_wait(0.5)

    # Navigate to URL
    driver.get("https://www.selenium.dev/selenium/web/inputs.html")

    # Click on the checkbox
    check_input = driver.find_element(By.NAME, "checkbox_input")
    check_input.click()

    is_checked = check_input.is_selected()
    assert is_checked == False

    # Handle the email input field
    email_input = driver.find_element(By.NAME, "email_input")
    email_input.clear()  # Clear field
    
    email = "admin@localhost.dev"
    email_input.send_keys(email)  # Enter text

    # Verify input
    data = email_input.get_attribute("value")
    assert data == email

    # Clear the email input field again
    email_input.clear()
    data = email_input.get_attribute("value")
    assert data == ""

    # Quit the driver
    driver.quit()
            //SendKeys
	            // Clear field to empty it from any previous data
	            IWebElement emailInput = driver.FindElement(By.Name("email_input"));
	            emailInput.Clear();
	            //Enter Text
	            String email = "admin@localhost.dev";
	            emailInput.SendKeys(email);
Show full example
using System;
	using Microsoft.VisualStudio.TestTools.UnitTesting;
	using OpenQA.Selenium;
	using OpenQA.Selenium.Chrome;
	
	namespace SeleniumDocs.Elements
	{
	    [TestClass]
	    public class InteractionTest
	    {
	        [TestMethod]
	        public void TestInteractionCommands()
	        {
	            IWebDriver driver = new ChromeDriver();
	            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
	
	            // Navigate to Url
	            driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
	            // Click on the element 
	            IWebElement checkInput = driver.FindElement(By.Name("checkbox_input"));
	            checkInput.Click();
	
	            //Verify
	            Boolean isChecked = checkInput.Selected;
	            Assert.AreEqual(isChecked, false);
	
	            //SendKeys
	            // Clear field to empty it from any previous data
	            IWebElement emailInput = driver.FindElement(By.Name("email_input"));
	            emailInput.Clear();
	            //Enter Text
	            String email = "admin@localhost.dev";
	            emailInput.SendKeys(email);
	
	            //Verify
	            String data = emailInput.GetAttribute("value");
	            Assert.AreEqual(data, email);
	
	
	            //Clear Element
	            // Clear field to empty it from any previous data
	            emailInput.Clear();
	            data = emailInput.GetAttribute("value");
	            
	            //Verify
	            Assert.AreEqual(data, "");
	
	            //Quit the browser
	            driver.Quit();
	        }
	    }
	}
    driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
Show full example
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Element Interaction' do
  let(:driver) { start_session }

  before { driver.get 'https://www.selenium.dev/selenium/web/inputs.html' }

  it 'clicks an element' do
    driver.find_element(name: 'color_input').click
  end

  it 'clears and send keys to an element' do
    driver.find_element(name: 'email_input').clear
    driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
  end
end
      let inputField = await driver.findElement(By.name('no_type'));
Show full example

  const {By, Browser, Builder} = require('selenium-webdriver');
  const assert = require("node:assert");
  
  
  describe('Element Interactions', function () {
    let driver;
  
    before(async function () {
      driver = new Builder()
        .forBrowser(Browser.CHROME)
        .build();
    });
  
    after(async () => await driver.quit());
  
    it('should Clear input and send keys into input field', async function () {
  
      try {
        await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
        let inputField = await driver.findElement(By.name('no_type'));
        await inputField.clear();
        await inputField.sendKeys('Selenium');
        const text = await inputField.getAttribute('value');
        assert.strictEqual(text, "Selenium");
      } catch (e) {
        console.log(e)
      }
    });
  });
  
    // Navigate to Url
    driver.get("https://www.selenium.dev/selenium/web/inputs.html")

	//Clear field to empty it from any previous data
	driver.findElement(By.name("email_input")).clear()
	
    // Enter text 
    driver.findElement(By.name("email_input")).sendKeys("admin@localhost.dev")
  
  

清除

元素清除命令 重置元素的内容. 这要求元素 可编辑, 且 可重置. 通常, 这意味着元素是具有 文本 类型的表单的输入元素或具有 内容可编辑 属性的元素. 如果不满足这些条件, 将返回 无效元素状态 错误.

        //Clear Element
        // Clear field to empty it from any previous data
        emailInput.clear();
Show full example
package dev.selenium.elements;

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class InteractionTest{

    @Test
    public void interactWithElements() {
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
        // Navigate to Url
        driver.get("https://www.selenium.dev/selenium/web/inputs.html");

	    // Click on the element 
        WebElement checkInput=driver.findElement(By.name("checkbox_input"));
        checkInput.click();
        Boolean isChecked=checkInput.isSelected();
        assertEquals(isChecked,false);

        //SendKeys
        // Clear field to empty it from any previous data
        WebElement emailInput=driver.findElement(By.name("email_input"));
        emailInput.clear();
	    //Enter Text
        String email="admin@localhost.dev";
	    emailInput.sendKeys(email);
        //Verify
        String data=emailInput.getAttribute("value");
        assertEquals(data,email);


        //Clear Element
        // Clear field to empty it from any previous data
        emailInput.clear();
        data=emailInput.getAttribute("value");
        assertEquals(data, ""); 

        driver.quit();
    }

}
    email_input.clear()
Show full example
from selenium import webdriver
from selenium.webdriver.common.by import By

import pytest


def test_interactions():
    # Initialize WebDriver
    driver = webdriver.Chrome()
    driver.implicitly_wait(0.5)

    # Navigate to URL
    driver.get("https://www.selenium.dev/selenium/web/inputs.html")

    # Click on the checkbox
    check_input = driver.find_element(By.NAME, "checkbox_input")
    check_input.click()

    is_checked = check_input.is_selected()
    assert is_checked == False

    # Handle the email input field
    email_input = driver.find_element(By.NAME, "email_input")
    email_input.clear()  # Clear field
    
    email = "admin@localhost.dev"
    email_input.send_keys(email)  # Enter text

    # Verify input
    data = email_input.get_attribute("value")
    assert data == email

    # Clear the email input field again
    email_input.clear()
    data = email_input.get_attribute("value")
    assert data == ""

    # Quit the driver
    driver.quit()
            //Clear Element
	            // Clear field to empty it from any previous data
	            emailInput.Clear();
	            data = emailInput.GetAttribute("value");
Show full example
using System;
	using Microsoft.VisualStudio.TestTools.UnitTesting;
	using OpenQA.Selenium;
	using OpenQA.Selenium.Chrome;
	
	namespace SeleniumDocs.Elements
	{
	    [TestClass]
	    public class InteractionTest
	    {
	        [TestMethod]
	        public void TestInteractionCommands()
	        {
	            IWebDriver driver = new ChromeDriver();
	            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
	
	            // Navigate to Url
	            driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
	            // Click on the element 
	            IWebElement checkInput = driver.FindElement(By.Name("checkbox_input"));
	            checkInput.Click();
	
	            //Verify
	            Boolean isChecked = checkInput.Selected;
	            Assert.AreEqual(isChecked, false);
	
	            //SendKeys
	            // Clear field to empty it from any previous data
	            IWebElement emailInput = driver.FindElement(By.Name("email_input"));
	            emailInput.Clear();
	            //Enter Text
	            String email = "admin@localhost.dev";
	            emailInput.SendKeys(email);
	
	            //Verify
	            String data = emailInput.GetAttribute("value");
	            Assert.AreEqual(data, email);
	
	
	            //Clear Element
	            // Clear field to empty it from any previous data
	            emailInput.Clear();
	            data = emailInput.GetAttribute("value");
	            
	            //Verify
	            Assert.AreEqual(data, "");
	
	            //Quit the browser
	            driver.Quit();
	        }
	    }
	}
    driver.find_element(name: 'email_input').clear
Show full example
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Element Interaction' do
  let(:driver) { start_session }

  before { driver.get 'https://www.selenium.dev/selenium/web/inputs.html' }

  it 'clicks an element' do
    driver.find_element(name: 'color_input').click
  end

  it 'clears and send keys to an element' do
    driver.find_element(name: 'email_input').clear
    driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
  end
end
      await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
Show full example

  const {By, Browser, Builder} = require('selenium-webdriver');
  const assert = require("node:assert");
  
  
  describe('Element Interactions', function () {
    let driver;
  
    before(async function () {
      driver = new Builder()
        .forBrowser(Browser.CHROME)
        .build();
    });
  
    after(async () => await driver.quit());
  
    it('should Clear input and send keys into input field', async function () {
  
      try {
        await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
        let inputField = await driver.findElement(By.name('no_type'));
        await inputField.clear();
        await inputField.sendKeys('Selenium');
        const text = await inputField.getAttribute('value');
        assert.strictEqual(text, "Selenium");
      } catch (e) {
        console.log(e)
      }
    });
  });
  
    // Navigate to Url
    driver.get("https://www.selenium.dev/selenium/web/inputs.html")

	//Clear field to empty it from any previous data
	driver.findElement(By.name("email_input")).clear()
	
  
  

提交

在Selenium 4中, 不再通过单独的端点以及脚本执行的方法来实现. 因此, 建议不要使用此方法, 而是单击相应的表单提交按钮.