• Selenium Video Tutorials

Selenium WebDriver - 处理特殊按键



Selenium Webdriver 可用于在创建自动化测试时处理特殊按键。这可以通过使用Actions 类和 Selenium 中的 sendKeys() 方法来实现。使用 keyUp() 和 keyDown() 方法进行键上/下操作主要用于处理特殊按键。如果我们使用 sendKeys() 方法,则需要将 Key.chord 作为参数传递给此方法。

示例 1 - 使用特殊按键复制和粘贴

现在让我们讨论如何在网页上执行复制和粘贴操作的元素识别,如下面的图片所示。首先,右键单击下面的网页,然后单击 Chrome 浏览器中的“检查”按钮。要检查源元素和目标元素,请单击 HTML 代码顶部的向左上箭头。

Selenium Handle Special Keys 1

让我们以以下页面为例,我们首先在“全名:”标签旁边输入文本 - JavaSelenium。然后将相同的文本复制并粘贴到“姓氏:”标签旁边的另一个输入框中。

Selenium Handle Special Keys 2

代码实现

package org.example;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import java.util.concurrent.TimeUnit;

public class CopyPasteAction {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);


      // Opening the webpage where we will identify an element
      driver.get("https://tutorialspoint.com/selenium/practice/register.php");

      // Identify the first input box with xpath locator
      WebElement e = driver.findElement(By.xpath("//*[@id='firstname']"));

      // enter some text
      e.sendKeys("Selenium");

      // chose the key as per platform
      Keys k = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL;

      // object of Actions class to copy then paste
      Actions a = new Actions(driver);
      a.keyDown(k);
      a.sendKeys("a");
      a.keyUp(k);
      a.build().perform();

      // Actions class methods to copy text
      a.keyDown(k);
      a.sendKeys("c");
      a.keyUp(k);
      a.build().perform();

      // Action class methods to tab and reach to next input box
      a.sendKeys(Keys.TAB);
      a.build().perform();

      // Actions class methods to paste text
      a.keyDown(k);
      a.sendKeys("v");
      a.keyUp(k);
      a.build().perform();

      // Identify the second input box with xpath locator
      WebElement s = driver.findElement(By.xpath("//*[@id='lastname']"));

      // Getting text in the second input box
      String text = s.getAttribute("value");
      System.out.println("Value copied and pasted: " + text);

      // Closing browser
      driver.quit();
   }
}

输出

Value copied and pasted: JavaSelenium

Process finished with exit code 0

在上面的示例中,我们首先在第一个输入框中输入了文本JavaSelenium,然后将相同的文本复制并粘贴到第二个输入框中,然后在控制台中获取了第二个输入框中的输入文本作为消息 - 已复制并粘贴的值:JavaSelenium

最后,收到消息进程已完成,退出代码为 0,表示代码已成功执行。

示例 2 - 使用特殊按键复制和粘贴

让我们使用与上面相同的示例,并在不使用 Actions 类的情况下实现相同的操作。

package org.example;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class CopyPaste {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage where we will identify an element
      driver.get("https://tutorialspoint.com/selenium/practice/register.php");

      // Identify the first input box with xpath locator
      WebElement e = driver.findElement(By.xpath("//*[@id='firstname']"));

      // Identify the second input box with xpath locator
      WebElement s = driver.findElement(By.xpath("//*[@id='lastname']"));

      // chose the key as per platform
      Keys k = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND :  Keys.CONTROL;

      // enter some text
      e.sendKeys("JavaSelenium");

      // select the whole entered text
      e.sendKeys(Keys.chord(k, "a"));

      // copy the whole entered text
      e.sendKeys(Keys.chord(k, "c"));

      // tab and reach to next input box
      e.sendKeys(Keys.TAB);

      // paste the whole entered text
      s.sendKeys(Keys.chord(k, "v"));

      // Getting text in the second input box
      String text = s.getAttribute("value");
      System.out.println("Value copied and pasted: " + text);
      
      // Closing browser
      driver.quit();
   }
}

输出

Value copied and pasted: JavaSelenium 

在上面的示例中,我们首先在第一个输入框中输入了文本JavaSelenium,然后使用 sendKeys() 和 Key.chord() 方法将相同的文本复制并粘贴到第二个输入框中。最后,我们在控制台中获取了第二个输入框中的输入文本作为消息 - 已复制并粘贴的值:JavaSelenium

示例 3 - 使用特殊按键输入大写文本

让我们再举一个例子,我们将使用特殊按键输入大写字母AUTOMATION。请注意,在将值发送到 sendKeys() 方法时,我们将传递automation并按下 SHIFT 键。

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import java.util.concurrent.TimeUnit;

public class KeyAction {
   public static void main(String[] args) throws InterruptedException {
      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://tutorialspoint.com/selenium/practice/text-box.php");

      // Identify the first input box with xpath locator
      WebElement e = driver.findElement(By.xpath("//*[@id='fullname']"));

      // Actions class
      Actions a = new Actions(driver);

      // moving to an input box and clicking on it
      a.moveToElement(e).click();

      // key UP and DOWN action for SHIFT
      a.keyDown(Keys.SHIFT);
      a.sendKeys("automation").keyUp(Keys.SHIFT).build().perform();

      // get value entered
      System.out.println("Text entered: " + e.getAttribute("value"));

      // Closing browser
      driver.quit();
   }
}

输出

Text entered: AUTOMATION

Process finished with exit code 0

在上面的示例中,我们输入了文本automation并按下了 SHIFT 键,然后在控制台中获取了大写输入文本以及消息 - 输入的文本:AUTOMATION

结论

这总结了我们关于 Selenium Webdriver 处理特殊按键教程的全面介绍。我们首先描述了一个使用特殊按键(如 CONTROL、SHIFT、TAB、CONTROL + A、CONTROL + V、CONTROL + C 等)复制和粘贴文本的示例,并说明了如何使用 Selenium 输入大写文本。这使您深入了解了在 Selenium Webdriver 中处理特殊按键的方法。明智的做法是不断练习您所学到的知识,并探索其他与 Selenium 相关的知识,以加深您的理解并扩展您的视野。

广告