jck28 - 小柒 - selenium - 高级控件交互方法

一, Actions 介绍

1,简介

  • 用于向浏览器设备输入动作 。
    image

2,键盘

(1)键盘操作

image

(2)键盘操作处理方法

image

(3)代码示例

package action;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
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.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import java.time.Duration;
import java.util.Set;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;

public class ActionTest {
    static WebDriver driver;

    @BeforeAll
    static void setupClass() {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        //创建一个driver对象
        driver = new ChromeDriver(options);
        //声明隐式等待
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(6));
    }

    @AfterAll
    static void tearDownClass() throws InterruptedException {
        Thread.sleep(5000);
        driver.quit();
    }


    @Test
    void enterKey(){
        driver.get("https://vip.ceshiren.com/#/ui_study/keypress");
        //定位输入框
        WebElement element = driver.findElement(By.className("el-input__inner"));
        //开始鼠标键盘的操作,输入文本并在键盘上点击回车按键
        Actions actions = new Actions(driver);
        actions.sendKeys(element, "霍格沃兹")
                .sendKeys(Keys.ENTER).build().perform();
        //查找输入后键盘操作的结果
        WebElement result = driver.findElement(By.className("mb-2"));
        String text = result.getText();
        assertThat(text,containsString("霍格沃兹"));
    }


    @Test
    void commandsWithClick(){
        driver.get("https://ceshiren.com/");
        //定位第一个帖子
        WebElement firstElement = driver.findElement(By.xpath("//*[@role='heading']"));
        String firstElementText = firstElement.getText();
        System.out.println("帖子的内容为:" + firstElementText);
        //获取当前窗口
        String originHandle = driver.getWindowHandle();
        //开始鼠标键盘的操作
        Actions actions = new Actions(driver);
        //在定位帖子上,按下键盘的command键,然后放开command键,即可在新页面打开帖子
        actions.keyDown(Keys.COMMAND).click(firstElement)
                .keyUp(Keys.COMMAND).build().perform();
        //获取所有窗口,并切换到新窗口
        Set<String> windowHandles = driver.getWindowHandles();
        for (String handle : windowHandles) {
            if(!handle.equals(originHandle)){
                driver.switchTo().window(handle);
                break;
            }
        }
        //获取新窗口标题
        String title = driver.getTitle();
        System.out.println("新窗口的标题为:" + title);
        assertThat(title,containsString(firstElementText));
    }
}

3,鼠标

(1)鼠标操作

image

(2)鼠标操作处理方法

(3)代码示例

 //鼠标点击操作
    @Test
    void mouseAction(){
        driver.get("https://vip.ceshiren.com/#/ui_study/clicks");
        //定位点击鼠标后的文本信息
        WebElement text = driver.findElement(By.className("mb-2"));
        //定位单击按钮并操作鼠标点击
        WebElement oneClick = driver.findElement(By.id("click"));
        Actions actions = new Actions(driver);
        actions.click(oneClick).perform();
        String clickText = text.getText();
        System.out.println("点击单击按钮后的文本信息:" + clickText);
        executableList.add(() -> assertThat(clickText,containsString("单击按钮")));
        //定位双击按钮并操作鼠标点击
        WebElement dbClick = driver.findElement(By.id("dblclick"));
        actions.doubleClick(dbClick).perform();
        String dbClickText = text.getText();
        System.out.println("点击双击按钮后的文本信息:" + dbClickText);
        executableList.add(() -> assertThat(dbClickText,containsString("双击按钮")));
        //定位右键单击按钮并操作鼠标点击
        WebElement rigthClick = driver.findElement(By.id("rightClick"));
        actions.contextClick(rigthClick).perform();
        String rightClickText = text.getText();
        System.out.println("点击右键单击按钮后的文本信息:" + rightClickText);
        executableList.add(() -> assertThat(rightClickText,containsString("鼠标右键单击按钮")));
        assertAll(executableList);
    }

    //鼠标悬停操作
    @Test
    void mouseOver(){
        driver.get("https://vip.ceshiren.com/#/ui_study/mouseover");
        //定位点击鼠标后的文本信息
        WebElement text = driver.findElement(By.className("mb-2"));
        //定位悬停按钮
        WebElement oneClick = driver.findElement(By.xpath("//*[text()='鼠标移入']"));
        //进行鼠标悬停操作
        Actions actions = new Actions(driver);
        actions.moveToElement(oneClick).perform();
        String moveText = text.getText();
        System.out.println("鼠标悬停时的文本信息:" + moveText);
        assertThat(moveText,containsString("鼠标移入"));
        //切换到其他悬停按钮
        WebElement otherClick = driver.findElement(By.xpath("//*[text()='其他']"));
        actions.moveToElement(otherClick).perform();
        String otherText = text.getText();
        System.out.println("鼠标移出后的文本信息:" + otherText);
        assertThat(otherText,equalTo("鼠标操作:"));
    }

    //鼠标拖拽操作
    @Test
    void mouseChains(){
        driver.get("https://vip.ceshiren.com/#/ui_study/action_chains");
        //需要移动拖拽的元素A
        WebElement AElement = driver.findElement(By.id("item1"));
        //需要移动到哪里的定位元素B
        WebElement BElement = driver.findElement(By.id("item3"));
        //进行鼠标拖拽操作
        Actions actions = new Actions(driver);
        actions.dragAndDrop(AElement, BElement).perform();
        //断言
        String pageSource = driver.getPageSource();
        assertThat(pageSource,containsString("验证通过"));
    }