自动化测试selenium(三)定位元素

1)CSS选择器定位元素

        CSS选择器是一种模式,用于选择需要样式化的HTML元素。在Web开发中,CSS选择器用于定位文档中的元素,以便对它们应用样式规则。这里介绍几种常用的CSS选择器:

  1. 元素选择器(类型选择器)
    选择所有指定类型的元素。例如,p 选择所有<p>元素。

  2. 类选择器
    选择所有具有指定类名的元素。类名以点(.)开头。例如,.classname 选择所有具有类名classname的元素。

  3. ID选择器
    选择具有指定ID的元素。ID在HTML文档中应该是唯一的。ID选择器以井号(#)开头。例如,#idname 选择具有IDidname的元素。

  4. 属性选择器
    根据元素的属性及属性值来选择元素。例如,[type="text"] 选择所有type属性值为text的元素。

  5. 后代选择器(或包含选择器):
    选择某个元素内部的后代元素。使用空格分隔两个选择器。例如,div p 选择<div>元素内部的所有<p>元素。

  6. 子选择器
    选择直接子元素。使用>分隔两个选择器。例如,ul > li 选择所有直接位于<ul>元素内部的<li>元素。

  7. 相邻兄弟选择器
    选择紧接在另一元素后的元素,且二者有相同的父元素。使用+分隔两个选择器。例如,h1 + p 选择所有紧跟在<h1>元素后的<p>元素。

  8. 通用兄弟选择器
    选择某个元素之后的所有兄弟元素,且二者有相同的父元素。使用~分隔两个选择器。例如,h1 ~ p 选择所有在<h1>元素之后的<p>元素。

  9. 伪类选择器
    用于选择元素的特殊状态。例如,:hover 选择鼠标指针浮动在上面的元素,:first-child 选择作为其父元素的第一个子元素的元素。

  10. 伪元素选择器
    用于样式化元素的特定部分。例如,::before 在元素内容之前插入新内容,::after 在元素内容之后插入新内容。

  CSS选择器可以组合使用,以更精确地定位元素。例如,.classname p 选择所有类名为classname的元素内部的<p>元素。

2)xpath定位元素

    XPath(XML Path Language)是一种在XML文档中查找信息的语言,但它也经常被用于HTML文档的解析,特别是在Web自动化测试(如Selenium)和网页爬虫中,以定位和操作页面上的元素。XPath提供了一种强大的方式来选择节点,无论是基于节点的属性、位置还是其他条件。

    在Web自动化测试中,使用XPath定位元素时,通常会根据元素的HTML结构、属性(如id、class、name等)以及它们之间的相对位置来编写XPath表达式。下面是一些XPath定位元素的常见示例:

1. 基于元素ID

        如果元素有一个唯一的ID,可以直接使用它来定位元素,但XPath不是直接支持ID选择器的(像CSS选择器那样使用#),而是需要通过属性选择器来实现:

//*[@id='elementId']

这里,//*表示选择文档中的任何元素,[@id='elementId']是一个条件,表示选择那些id属性值为elementId的元素。

2. 基于元素标签名

选择所有<p>标签的元素:

//p

3. 基于类名

选择所有类名为classname的元素:

//*[contains(concat(' ', normalize-space(@class), ' '), ' classname ')]

注意,这里使用了containsconcat函数来处理类名可能存在的空格和多个类名的情况。

4. 基于属性

选择所有type属性为text<input>元素:

//input[@type='text']

5. 基于位置

选择第一个<div>元素内的第二个<p>元素:

//div/p[2]

6. 组合条件

选择所有类名为classnametype属性为text<input>元素:

//input[@type='text' and contains(concat(' ', normalize-space(@class), ' '), ' classname ')]

注意事项

  • XPath表达式对大小写敏感,因此请确保在编写XPath时,元素标签名、属性名等的大小写与HTM
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Main {
    public static void main(String[] args) {
        //创建一个驱动
        WebDriver webDriver=new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //定位百度搜索框(通过css选择器定位元素)

      /* WebElement search_input = webDriver.findElement(By.cssSelector(".s_ipt"));*/

       //通过xpath定位元素
       /* WebElement search_input=webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));*/

        WebElement search_input=webDriver.findElement(By.tagName("input"));
        // 通过标签定位元素
        if(search_input==null){
            System.out.println("测试不通过");
        }else {
            System.out.println("测试通过");
        }
       // webDriver.quit();
        webDriver.close();
    }
}

        在使用Selenium WebDriver进行自动化测试时,webDriver.quit() 和 webDriver.close() 是两个常用的方法来结束浏览器会话,但它们之间存在一些关键的区别:

  1. webDriver.quit()
    • 当调用 quit() 方法时,它会关闭所有与WebDriver实例关联的浏览器窗口,并结束WebDriver会话。这意呀着,如果打开了多个浏览器窗口或标签页,使用 quit() 会关闭它们全部。
    • 在结束浏览器会话之后,你将无法再使用这个WebDriver实例来执行任何浏览器操作,因为它已经与浏览器断开了连接。
    • quit() 方法是一个更加彻底的资源清理方式,因为它不仅关闭了浏览器窗口,还释放了WebDriver占用的系统资源。
  2. webDriver.close()
    • 与 quit() 不同,close() 方法仅关闭当前浏览器窗口或标签页。如果你的WebDriver实例打开了多个窗口或标签页,close() 只会关闭当前激活的那个窗口,而不会影响其他窗口。
    • 如果你的测试脚本仅打开了一个浏览器窗口,那么 close() 和 quit() 在效果上看起来可能是一样的,因为它们都关闭了唯一的浏览器窗口。但是,在资源管理方面,quit() 更优,因为它确保了WebDriver占用的资源被完全释放。
    • 如果在关闭最后一个窗口后还需要执行一些清理工作(比如检查日志或清理临时文件),你可能更倾向于使用 close(),因为它不会立即结束WebDriver会话。但是,在完成这些额外工作后,仍然应该调用 quit() 来确保资源被正确释放。

总结

  • 使用 quit() 来结束所有的浏览器窗口并释放WebDriver占用的资源。
  • 使用 close() 来关闭当前激活的浏览器窗口,而不影响其他窗口或标签页。如果你只打开了一个窗口,且不需要执行额外的清理工作,quit() 和 close() 在效果上可能相同,但推荐使用 quit() 以确保资源被完全释放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值