0


自动化测试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 ')]

注意,这里使用了

contains

concat

函数来处理类名可能存在的空格和多个类名的情况。

4. 基于属性

选择所有

type

属性为

text

<input>

元素:

//input[@type='text']

5. 基于位置

选择第一个

<div>

元素内的第二个

<p>

元素:

//div/p[2]

6. 组合条件

选择所有类名为

classname

type

属性为

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() 以确保资源被完全释放。

本文转载自: https://blog.csdn.net/Vienna910/article/details/140558097
版权归原作者 田里插秧 所有, 如有侵权,请联系我们删除。

“自动化测试selenium(三)定位元素”的评论:

还没有评论