selenium中用到的一些元素定位的方式和示例

Selenium元素定位方法总结 Selenium可以驱动浏览器完成各种操作,比如模拟点击等。要想操作一个元素,首先应该识别这个元素。人有各种的特征(属性),我们可以通过其特征找到人,如通过身份证号、姓名、家庭住址。同理,一个元素会有各种的特征(属性),我们可以通过这个属性找到这对象。 目录 一、元素的概念 (一)什么是元素? (二)查看元素信息 二、元素定位方法 (一)根据id定位 (二)根据name定位 (三)通过class name定位 (四)根据tag定位 (五)通过link text定位 (六)通过parti 阅读详情

本文内容结合chatgpt生成整理得到。
并参考以下文章:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46066007/article/details/131384908

常用定位方式及解释

支持的元素定位方式

Selenium支持多种元素定位方式。以下是常用定位方式、解释及示例:

  1. ID

    • 解释:通过元素的id属性进行定位。
    • 示例driver.find_element(By.ID, "element_id")
  2. Name

    • 解释:通过元素的name属性进行定位。
    • 示例driver.find_element(By.NAME, "element_name")
  3. Class Name

    • 解释:通过元素的class属性进行定位。
    • 示例driver.find_element(By.CLASS_NAME, "element_class")
  4. Tag Name

    • 解释:通过元素的标签名进行定位。
    • 示例driver.find_element(By.TAG_NAME, "element_tag")
  5. Link Text

    • 解释:通过链接文本进行定位,适用于<a>标签。
    • 示例driver.find_element(By.LINK_TEXT, "link_text")
  6. Partial Link Text

    • 解释:通过部分链接文本进行定位,适用于<a>标签。
    • 示例driver.find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")
  7. XPath

    • 解释:通过XPath表达式进行定位。
    • 示例driver.find_element(By.XPATH, "//tag[@attribute='value']")
  8. CSS Selector

    • 解释:通过CSS选择器进行定位。
    • 示例driver.find_element(By.CSS_SELECTOR, "css_selector")

示例代码

以下是如何使用这些定位方式的示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

# 启动浏览器
driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 通过 ID 定位
element_by_id = driver.find_element(By.ID, "element_id")

# 通过 Name 定位
element_by_name = driver.find_element(By.NAME, "element_name")

# 通过 Class Name 定位
element_by_class_name = driver.find_element(By.CLASS_NAME, "element_class")

# 通过 Tag Name 定位
element_by_tag_name = driver.find_element(By.TAG_NAME, "element_tag")

# 通过 Link Text 定位
element_by_link_text = driver.find_element(By.LINK_TEXT, "link_text")

# 通过 Partial Link Text 定位
element_by_partial_link_text = driver.find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")

# 通过 XPath 定位
element_by_xpath = driver.find_element(By.XPATH, "//tag[@attribute='value']")

# 通过 CSS Selector 定位
element_by_css_selector = driver.find_element(By.CSS_SELECTOR, "css_selector")

# 关闭浏览器
driver.quit()

这些定位方式提供了多种灵活的选择,适用于各种复杂的网页元素定位需求。

css定位器的一些使用示例

使用CSS Selector定位页面元素是一种非常灵活和强大的方式。以下是一些常见的CSS Selector示例及其讲解:

示例页面结构

假设有一个示例页面结构如下:

<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <div id="main">
        <h1 class="title">Welcome to Example</h1>
        <p class="description">This is an example page.</p>
        <div class="content">
            <ul>
                <li><a href="link1.html">Link 1</a></li>
                <li><a href="link2.html">Link 2</a></li>
                <li><a href="link3.html">Link 3</a></li>
            </ul>
        </div>
    </div>
</body>
</html>

CSS Selector 定位示例及讲解

1. 通过ID定位
element = driver.find_element(By.CSS_SELECTOR, "#main")

解释:通过元素的id属性进行定位。#表示ID选择器。

2. 通过类名定位
element = driver.find_element(By.CSS_SELECTOR, ".title")

解释:通过元素的class属性进行定位。.表示类选择器。

3. 通过标签名定位
element = driver.find_element(By.CSS_SELECTOR, "h1")

解释:通过元素的标签名进行定位。

4. 组合选择器
element = driver.find_element(By.CSS_SELECTOR, "div#main > h1.title")

解释:组合使用ID和类名进行定位。>表示直接子元素选择器。

5. 属性选择器
element = driver.find_element(By.CSS_SELECTOR, "a[href='link1.html']")

解释:通过元素的属性进行定位。

6. 部分属性选择器
element = driver.find_element(By.CSS_SELECTOR, "a[href*='link']")

解释:通过元素的部分属性值进行定位。*=表示包含属性值。

7. 子元素选择器
element = driver.find_element(By.CSS_SELECTOR, "div.content > ul > li:nth-child(2)")

解释:通过子元素选择器定位列表中的第二个<li>元素。

8. 后代选择器
element = driver.find_element(By.CSS_SELECTOR, "div#main h1")

解释:选择div中所有<h1>后代元素。

9. 兄弟选择器
element = driver.find_element(By.CSS_SELECTOR, "h1 + p")

解释:选择紧跟在<h1>后的兄弟元素<p>

示例代码

以下是如何使用这些CSS Selector定位示例的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

# 启动浏览器
driver = webdriver.Chrome()
driver.get("path/to/your/example.html")

# 通过ID定位
element_by_id = driver.find_element(By.CSS_SELECTOR, "#main")

# 通过类名定位
element_by_class_name = driver.find_element(By.CSS_SELECTOR, ".title")

# 通过标签名定位
element_by_tag_name = driver.find_element(By.CSS_SELECTOR, "h1")

# 组合选择器
element_combination = driver.find_element(By.CSS_SELECTOR, "div#main > h1.title")

# 属性选择器
element_by_attribute = driver.find_element(By.CSS_SELECTOR, "a[href='link1.html']")

# 部分属性选择器
element_by_partial_attribute = driver.find_element(By.CSS_SELECTOR, "a[href*='link']")

# 子元素选择器
element_by_child = driver.find_element(By.CSS_SELECTOR, "div.content > ul > li:nth-child(2)")

# 后代选择器
element_by_descendant = driver.find_element(By.CSS_SELECTOR, "div#main h1")

# 兄弟选择器
element_by_sibling = driver.find_element(By.CSS_SELECTOR, "h1 + p")

# 关闭浏览器
driver.quit()

详细解释

  1. ID选择器#号后跟元素的id属性值。
  2. 类选择器.号后跟元素的class属性值。
  3. 标签选择器:直接使用标签名称进行定位。
  4. 组合选择器:组合使用多种选择器进行更精确的定位。
  5. 属性选择器[]内指定属性名和属性值进行定位。
  6. 部分属性选择器:使用*=表示包含属性值的部分内容。
  7. 子元素选择器:使用>表示直接子元素选择。
  8. 后代选择器:选择某个元素的所有后代元素。
  9. 兄弟选择器:使用+选择紧邻的兄弟元素。

通过掌握这些CSS Selector定位方法,可以更加灵活和高效地定位页面元素。

xpath定位示例

使用Selenium和XPath定位页面元素是一种非常灵活和强大的方式。下面是一些常见的XPath定位示例及其讲解:

示例页面结构

假设有一个示例页面结构如下:

<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <div id="main">
        <h1 class="title">Welcome to Example</h1>
        <p class="description">This is an example page.</p>
        <div class="content">
            <ul>
                <li><a href="link1.html">Link 1</a></li>
                <li><a href="link2.html">Link 2</a></li>
                <li><a href="link3.html">Link 3</a></li>
            </ul>
        </div>
    </div>
</body>
</html>

XPath 定位示例及讲解

1. 绝对路径
element = driver.find_element(By.XPATH, "/html/body/div/h1")

解释:定位页面中第一个<h1>元素,使用绝对路径从根节点<html>开始。

2. 相对路径
element = driver.find_element(By.XPATH, "//h1")

解释:定位页面中第一个<h1>元素,使用相对路径,从页面的任何位置开始搜索。

3. 按属性值定位
element = driver.find_element(By.XPATH, "//h1[@class='title']")

解释:定位拥有class属性且值为title<h1>元素。

4. 按部分属性值定位
element = driver.find_element(By.XPATH, "//h1[contains(@class, 'tit')]")

解释:定位class属性中包含tit值的<h1>元素。

5. 使用逻辑运算符
element = driver.find_element(By.XPATH, "//h1[@class='title' and text()='Welcome to Example']")

解释:定位class属性值为title且文本内容为Welcome to Example<h1>元素。

6. 通过层级关系定位
element = driver.find_element(By.XPATH, "//div[@id='main']/h1")

解释:定位id属性为main<div>元素的直接子元素<h1>

7. 定位元素集合中的特定元素
element = driver.find_element(By.XPATH, "//ul/li[2]")

解释:定位<ul>元素中第二个<li>子元素。

8. 使用text()函数
element = driver.find_element(By.XPATH, "//a[text()='Link 2']")

解释:定位文本内容为Link 2<a>元素。

9. 定位所有匹配的元素
elements = driver.find_elements(By.XPATH, "//li")

解释:定位页面中所有<li>元素,返回一个元素列表。

10. 使用starts-with函数
element = driver.find_element(By.XPATH, "//a[starts-with(@href, 'link')]")

解释:定位href属性值以link开头的<a>元素。

示例代码

以下是如何使用这些XPath定位示例的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

# 启动浏览器
driver = webdriver.Chrome()
driver.get("path/to/your/example.html")

# 绝对路径定位
element_absolute = driver.find_element(By.XPATH, "/html/body/div/h1")

# 相对路径定位
element_relative = driver.find_element(By.XPATH, "//h1")

# 按属性值定位
element_attribute = driver.find_element(By.XPATH, "//h1[@class='title']")

# 按部分属性值定位
element_partial_attribute = driver.find_element(By.XPATH, "//h1[contains(@class, 'tit')]")

# 使用逻辑运算符
element_logical = driver.find_element(By.XPATH, "//h1[@class='title' and text()='Welcome to Example']")

# 通过层级关系定位
element_hierarchy = driver.find_element(By.XPATH, "//div[@id='main']/h1")

# 定位元素集合中的特定元素
element_specific = driver.find_element(By.XPATH, "//ul/li[2]")

# 使用text()函数
element_text = driver.find_element(By.XPATH, "//a[text()='Link 2']")

# 定位所有匹配的元素
elements_all = driver.find_elements(By.XPATH, "//li")

# 使用starts-with函数
element_starts_with = driver.find_element(By.XPATH, "//a[starts-with(@href, 'link')]")

# 关闭浏览器
driver.quit()

详细解释

  1. 绝对路径:从根节点开始的路径定位元素,使用/表示。
  2. 相对路径:从页面的任意位置开始的路径,使用//表示。
  3. 按属性值定位:使用[@attribute='value']语法定位特定属性值的元素。
  4. 按部分属性值定位:使用contains(@attribute, 'value')语法定位包含部分属性值的元素。
  5. 逻辑运算符:使用andor组合条件进行定位。
  6. 层级关系定位:使用/表示直接子元素关系。
  7. 特定元素:使用索引[index]定位特定位置的元素。
  8. text()函数:使用text()='value'定位具有特定文本内容的元素。
  9. starts-with函数:使用starts-with(@attribute, 'value')定位以特定值开头的属性。

通过这些示例和解释,可以更加灵活和精准地使用XPath定位页面元素。

各种元素定位方式之间的比较

CSS选择器和XPath选择器都是用于在文档对象模型(DOM)中定位元素的强大工具,但它们的语法和用途有所不同。以下是对这两者的详细解释,以及它们与其他元素定位方式之间的关系和区别。

CSS选择器和XPath选择器的关系

  1. CSS选择器

    • 语法:基于CSS样式规则,适合前端开发。
    • 用途:用于根据元素的标签、类、ID、属性等进行选择。
    • 特点:语法简洁,性能较好。适用于大多数常见的元素定位场景。
    • 示例
      #main          /* ID选择器 */
      .title         /* 类选择器 */
      div > p        /* 子元素选择器 */
      a[href='link'] /* 属性选择器 */
      
  2. XPath选择器

    • 语法:基于路径表达式,源自XML路径语言。
    • 用途:用于通过元素的层级关系、属性、文本内容等进行选择。
    • 特点:功能强大,支持复杂的查询(如父子关系、条件判断等)。适用于需要精确定位的场景。
    • 示例
      //div[@id='main']           /* 按属性值定位 */
      //h1[contains(@class, 'tit')] /* 按部分属性值定位 */
      //ul/li[2]                  /* 定位特定子元素 */
      

CSS选择器与XPath选择器的互换性

在很多简单的场景下,CSS选择器和XPath选择器可以互换使用,但在某些复杂的查询中,XPath提供了更多的灵活性和功能。

可以互换的情况:
  1. 按ID选择

    • CSS:#main
    • XPath://*[@id='main']
  2. 按类名选择

    • CSS:.title
    • XPath://*[contains(@class, 'title')]
  3. 按标签选择

    • CSS:div
    • XPath://div
  4. 按属性选择

    • CSS:a[href='link']
    • XPath://a[@href='link']
不可以互换的情况:
  1. 复杂的父子关系

    • CSS:div > p(只能选择直接子元素)
    • XPath://div/p(可以选择任意子元素)
  2. 索引选择

    • XPath://ul/li[2](可以选择特定索引的元素)
    • CSS:不支持直接的索引选择,需要结合伪类选择器,如ul > li:nth-child(2)
  3. 条件选择

    • XPath://h1[@class='title' and text()='Welcome'](可以结合属性和文本内容进行选择)
    • CSS:无法直接实现,需要更复杂的逻辑。

其他元素定位方式

  1. ID定位

    • driver.find_element(By.ID, "element_id")
    • 最快且最常用的定位方式,适用于ID唯一的元素。
  2. Name定位

    • driver.find_element(By.NAME, "element_name")
    • 适用于表单元素。
  3. Class Name定位

    • driver.find_element(By.CLASS_NAME, "element_class")
    • 适用于类名唯一的元素。
  4. Tag Name定位

    • driver.find_element(By.TAG_NAME, "element_tag")
    • 适用于标签名唯一或需要选择多个相同标签的场景。
  5. Link Text定位

    • driver.find_element(By.LINK_TEXT, "link_text")
    • 适用于文本唯一的链接。
  6. Partial Link Text定位

    • driver.find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")
    • 适用于部分文本唯一的链接。

互换性总结

  • CSS选择器XPath选择器在简单场景下可以互换使用,但在处理复杂DOM结构时,XPath更为灵活和强大。
  • ID、Name、Class Name等定位方式在特定场景下更简洁高效,但不具备CSS选择器和XPath选择器的灵活性。
  • XPath选择器提供了最强的查询功能,适用于任何复杂的元素定位需求,但语法较为复杂。
  • CSS选择器在前端开发中更常用,适合大部分简单的定位需求,语法简洁直观。

根据具体需求选择合适的定位方式可以提高自动化测试脚本的效率和可维护性。

建议加大元素定位使用方式的练习,如果遇到实在没有思路的,可以借助chatgpt,但是,还是不能依赖chatgpt。

selenium定位隐藏元素 面试官:“你是怎么使用selenium定位隐藏元素?”。 阅读详情

相关推荐

Selenium元素定位

selenium 工具模拟用户行为,web端的UI层的自动化测试工具。最擅长做的事情就是模拟用户点击,输入内容等等。 引言: 自动化测试模拟用户操作,用户访问一个百度站点,找到搜索框,输入123,点击百度一下这个操作。全程都是用眼睛看的,人有思维; 那么自动化测试不像一样有眼睛去看,自动化测试需求识别HTML页面上的信息---也就是我们所说的元素;所以做自动化测试...

weixin_42378396的博客 1840

Selenium基础-CSS定位

一、CSS定位 1、单一属性定位 1:type selector driver.find_element_by_css_selector('input') 2:id 定位 driver.find_element_by_css_selector('#kw') 3:class 定位 driver.find_element_by_css_selector('.s_ipt') 4:其他属性定位 driver.find_element_by_css_selector('[name='wd']') driver.fin

xiten的博客 541

Selenium(6):元素定位_xpath定位

driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径。driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径。driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径。

奔跑在路上you的博客 1448

Selenium元素定位方法详细介绍

一、元素定位基本方法 1、如何进行元素定位元素:由标签头 + 标签尾 + 标签标签尾包括的文本内容; 元素的信息就是指元素标签名及元素的属性; 元素的层级结构就是指元素之间相互嵌套的层级结构; 元素定位最终就是通过元素的信息或者元素的层级结构来进行元素定位; 2、浏览器开发者工具介绍 浏览器开发者工具主要是用来查看元素的信息,同时也可以查看接口的相关信息; 浏览器开发者工具不需要安装,浏览器自带; 浏览器开发者工具的启动: F12; 选中元素右键点击检查/检查元素(谷歌浏览器、火狐浏览器);

石头缝里的小松鼠(AlySam) 7409

selenium元素八种定位方法

元素定位8中方式IdNameLink textTag NameClass NameXpath。

开摆 9451

selenium元素定位——css高级用法

selenium元素定位——css高级用法

weixin_46828073的博客 3512

Selenium之 CSS 选择器详细讲解

CSS选择器(Cascading Style Sheets Selector)是一种用于从HTML文档中选取元素的模式语言。它允许我们通过标签名、类名、ID、属性值等多种方式来定位页面中的特定元素。在.Selenium.中,我们可以使用.CSS.选择器定位需要操作的元素,例如输入框、按钮、链接等。CSS选择器在前端开发自动化测试中都非常重要。通过合理使用各种选择器类型,可以高效地定位元素并实现所需功能。

2401_89793006的博客 1556

selenium之如何定位iframe中的元素

今天想写个126邮箱自动化登录脚本,由于id是动态的,name也获取不到,最后通过查看页面发现是写在iframe中,所以要先获取表单,在获取表单中的元素,代码如下! 1,页面代码: ,2,自动化登录代码: ,3,selenium-iframe操作 iframe,又叫浮动帧标记,是内嵌的网页元素,可以将一个html文件嵌入到另一个html文件...

ths512的博客 2万+

Selenium之Css定位元素

Selenium之Css定位元素: cssSelector定位,属于CSS高级等位,它的定位方式,利用选择器进行的。在CSS 中,选择器是一种模式,用于选择需要添加样式的对象。“CSS” 列指示该属性是在哪个CSS 版本中定义的。(CSS1、CSS2 还是CSS3。); 下面罗列了一部分的CSS定位方式。看到这么多是否觉得CSS不再简单,其实不然常用的几种方式作者已标记,CSS定位是平常使用过程中...

柳轻声的博客 1万+

selenium 元素定位

selenium 元素定位记录

lijiabin417的博客 1333

selenium中隐藏元素定位

前言 面试题:selenium中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚啥叫定位,啥叫操作元素(如click,clear,send_keys) 隐藏元素 如下图有个输入框一个登录的按钮,本来是显示的 元素的属性隐藏显示,主要是 type="hidden"s...

huitest的博客 1万+

selenium元素定位

可以考虑使用driver.find_elements(),找不到元素时就会返回空列表,使用if-else语句,判断列表是否为空,非空,则正常找到元素,进行后续代码执行;XPath定位比 CSS 定位有更大的灵活性。在HTML当中,name属性id属性的功能基本相同,只是name属性并不是唯一的,如果遇到没有id标签的时候,我们可以考虑通过name标签来进行定位。判断元素在页面中是否显示,前提是元素存在,在元素存在的情况下判断其是显示还是隐藏状态,存在时返回True,不存在时返回FALSE。

xin_xiang_wang_zhi的博客 2038

Selenium元素定位八大方法

元素定位方式元素定位方式Selenium提供了八种定位元素方式1. id4. name7. XPath8. CSS定位说明:id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的;前提:元素有id属性。

weixin_69514393的博客 2064

Selenium元素定位方法大全

作为当下最流行的web UI自动化测试工具selenium是很多测试同学入门接触自动化测试时学习的第一个工具。想要自动化操作页面上的内容,元素定位是首先必须要学习的核心知识。

程序员小杨哥的博客 7477

Selenium实现元素定位

(1)通过id定位使用参数By.ID定位元素的ID属性;(2)通过元素定位使用参数By.NAME定位元素的NAME属性;(3)通过标签定位使用参数BY.TAG_NAME定位元素的TAG_NAME属性;一般不使用该参数,使用该参数后方法会返回list,不能准确定位所找元素(4)通过xpath定位使用参数By.XPATH通过xpath表达式定位元素;(5)通过css class定位使用参数By.CLASS_NAME定位元素class属性;

hlsxjh的博客 1436

Selenium之Web元素定位

Web页面主要由HTML、CSSJavaScript脚本构成,当前大部分页面都是动态页面。Web页面中的各类视觉元素,如文本框、按钮、复选框、图品、超链接表等,在Selenium中都被称为页面元素(web Elements)。Selenium提供了八种定位元素定位元素含义定位元素含义通过ID定位元素通过ID定位一组元素通过name定位元素通过name定位一组元素通过class定位元素通过class定位一组元素通过xpath定位元素通过xpath定位一组元素

m0_74824112的博客 1697

使用Selenium进行元素定位的全面指南

掌握Selenium中的元素定位技巧是进行高效自动化测试的关键。通过合理选择组合不同的定位方式,并结合高级技巧处理复杂场景,你可以显著提升测试脚本的稳定性可靠性。同时,遵循最佳实践,保持代码的简洁与可维护性,将为你的项目带来长远的好处。希望这份指南能帮助你全面理解掌握Selenium中的元素定位方法,助力你在自动化测试领域取得更大的成功!

2401_89793006的博客 1507
上一篇: 爬虫入门系列笔记
hushi19910329
博客等级 码龄16年 31粉丝 · 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值