你知道Selenium自动化测试中有几种方法可以实现元素定位?

本文详细介绍了在Selenium自动化测试中如何通过不同的方法进行元素定位,包括ID、class、tag name、name、linkText、partialLinkText、CSS Selector和XPath等。文章以Java为例,解释了各种定位方式的适用场景和优缺点,强调在复杂网页中使用CSS定位的推荐性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章是基于Java编程语言实现自动化测试,因此我们使用Java进行自动化测试时,除了要用到ide等Java开发必备的环境外,我们还需要安装浏览器对应的驱动,我使用的是谷歌浏览器,谷歌浏览器大全传送门,在下载驱动时,首先要去你的浏览器中查看你的浏览器版本,再下载对应的驱动版本

下载完成之后,我们在ide中创建一个新的Maven项目,需要导入selenium的依赖

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
</dependency>

使用selenium编写第一个脚本:

public class BilibiliSearch {
   
    public static void main(String[] args) {
   
        // 实例化一个WebDriver实例
        WebDriver driver = new ChromeDriver();
        // 访问网址
        driver.get("https://www.bilibili.com");
        // 通过Selenium实现自动模仿人为在输入框中输入,然后点击搜索按钮
        // 找到输入框的位置,输入"软件测试"
        driver.findElement(By.className("nav-search-input")).sendKeys("软件测试");

        // 找到搜索框的位置,点击搜索
        driver.findElement(By.className("nav-search-btn")).click();

        // 如果浏览器闪退,我们可通过Thread.sleep方法,让其暂停一段时间,这样我们就能观察到自动化测试的过程
        try {
   
            Thread.sleep(10000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }

        // 关闭浏览器
        driver.close();
    }
}

下述表明我们当前的网页是通过自动化软件控制的,而不是人工控制

在这里插入图片描述

自动化测试的过程:

在这里插入图片描述

我们先发起一个Client去让他调用一个Driver,然后我们进行代码的编写,例如发起http请求,这个服务器就是一个http服务器,client调用selenium的API,selenium的底层其实是发送http的请求到Driver,Server层发送一些指令到浏览器,浏览器进行元素查找,以及元素的操作,操作完成之后会将执行结果返回给server端,而server端会将返回结果返回给Client端,并由client端进行后续的处理。

元素定位:

我们为什么要做元素的定位?

例如我们现在任意的打开一个网页,对于人来说我们知道鼠标定位到哪里,我们需要做什么样的事情,而对于代码来说,它不像我们拥有如此聪明的大脑,所以我们必须通过代码告诉它,元素在哪里,你要做什么事情等。

根据ID进行元素的定位:

通过id定位,By.ID,id属性在HTML中是唯一的,因此使用id定位可以确保找到页面上唯一的元素,由于id是唯一的,浏览器在查找元素时可以快速定位到目标元素,提高了定位的效率

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

//在百度页面通过id定位到搜索框,再在搜索框中输入selenium,并显示搜索的结果
public class SeleniumSearch {
   
    public static void main(String[] args) throws InterruptedException {
   
        WebDriver webDriver=new ChromeDriver();
        //将浏览器的窗口设置为最大化
        webDriver.manage().window().maximize();
        webDriver.get("https://www.baidu.com");
        webDriver.findElement(By.id("kw")).sendKeys("selenium");
        webDriver.findElement(By.id("su")).click();
        Thread.sleep(2000);
        //对于下述代码,如果我们没写selenium4也会自动的进行检测,在代码执行完毕后将浏览器关闭
        //而selenium3并不会将其浏览器进行关闭
        webDriver.quit();
    }
}

在这里插入图片描述

但是对于目前市面上大部分流行的软件来说,前端开发使用的都是框架,而框架塑造出来的网页是不会给我们提供id的,那么此时就需要使用其他的方法进行元素的定位。

根据By.className进行元素定位:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.List;

public class BilibiliSearch2 {
   
    public static void main(String[] args) throws InterruptedException {
   
        WebDriver webDriver=new ChromeDriver();
        webDriver.manage().window().maximize();
        webDriver.get("https://www.bilibili.com/");
        //当我们使用findElement方法寻找某个元素时,如果这个元素包含多个,那么它就会自动跳转到第一个
        webDriver.findElement(By.className("channel-link")).click();
        //如果我们想指定跳转到某个,则可通过指定访问数组中的某个元素实现
        List<WebElement> elements = webDriver.findElements(By.className("channel-link"));
        //在控制台通过循环打印出class名为channel-link的所有名称
        for(WebElement element:elements){
   
            System.out.println(element.getText());
        }
        elements.get(4).click();
        Thread.sleep(3000);
        webDriver.quit();
    }
}

输出如下所示:

在这里插入图片描述

注意:如果我们的className中间有空格(如下所示),就会导致在定位元素时发生异常,此时我们就不能通过className来进行定位了,需要通过css来进行元素的定位

webDriver.findElement(By.className("icon-bg icon-bg__channel")).click()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从未止步..

谢谢你的打赏,我会继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值