selenium元素定位方法介绍|XPATH详解|下拉列表框定位方法

embedded/2024/9/25 22:25:38/

selenium元素定位方法介绍|XPATH详解|下拉列表框定位方法

  • 常用的 Selenium 元素定位方式
  • 元素定位方式示例
  • XPATH 定位方法详解
    • 使用元素标签名定位
    • 使用元素属性定位
    • 使用元素层级关系定位
    • 使用索引定位
    • 使用文本内容定位
    • 模糊定位
      • contains() 包含函数
      • starts-with;ends-with
      • 使用逻辑运算符 and、or
    • xpath轴定位
  • 下拉列表框定位及操作
      • 示例:

常用的 Selenium 元素定位方式

在这里插入图片描述

元素定位方式示例

LINK_TEXT、PARTIAL_LINK_TEXT不常用,未做介绍

python">import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By@pytest.fixture()
def set_up():driver = webdriver.Chrome()yield driverdriver.quit()  # 关闭浏览器def test_function(set_up):set_up.get("http://www.baidu.com")# 百度 输入框为例 <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">element = set_up.find_element(By.ID, 'kw')# element = set_up.find_element(By.NAME, 'wd')# element = set_up.find_element(By.CLASS_NAME, 's_ipt nobg_s_fm_hover')# element = set_up.find_element(By.TAG_NAME, 'input')  # tag的意思是标签名# element = set_up.find_element(By.XPATH, "//input[@id='kw']")# element = set_up.find_element(By.CSS_SELECTOR, "#kw")element.click()element.send_keys("123")

XPATH 定位方法详解

使用元素标签名定位

element = driver.find_element(By.XPATH, “//tag_name”)
例:driver.find_element(By.XPATH, “//input”)

这将返回匹配指定标签名的第一个元素。

使用元素属性定位

element = driver.find_element(By.XPATH, “//tag_name[@attribute=‘value’]”)
例:driver.find_element(By.XPATH, “//input[@id=‘kw’]”

这将返回匹配指定标签名和属性值的第一个元素。

使用元素层级关系定位

element = driver.find_element(By.XPATH, “//parent_tag/child_tag”)
例:driver.find_element(By.XPATH, “//div/span”
这将返回匹配指定父标签和子标签的元素。

使用索引定位

element = driver.find_element(“(By.XPATH, //tag_name)[index]”)
例:driver.find_element(By.XPATH, “//span[1]”
这将返回匹配指定标签名的第 index 个元素。

使用文本内容定位

element = driver.find_element(By.XPATH, “//tag_name[text()=‘text_content’]”)
例:driver.find_element(By.XPATH, “//span[text()=‘总览’]”
在这里插入图片描述

模糊定位

contains() 包含函数

如://button[contains(text(),“总览”)]、//button[contains(@class,“btn”)] contains不是=等于 多用于display属性

starts-with;ends-with

starts-with – 匹配以xx开头的属性值;
ends-with – 匹配以xx结尾的属性值
如://button[starts-with(@class,“btn”)]、//input[ends-with(@class,“-special”)]

使用逻辑运算符 and、or

如://input[@name=“phone” and @datatype=“m”]

xpath轴定位

// 表示选择当前节点下的所有后代节点
… 表示选择当前节点的父节点
parent:父节点
preceding-sibling:当前元素节点标签之前的所有兄弟节点
preceding:当前元素节点标签之前的所有节点
following-sibling:当前元素节点标签之后的所有兄弟节点
following:当前元素节点标签之后的所有节点
使用语法: 轴名称 :: 节点名称
使用较多场景:页面显示为一个表格样式的数据列

示例:
//td[text()=“扫描器”]/following-sibling::td//input[contains(@class, ‘PrivateSwitchBase-input MuiSwitch-input css-1m9pwf3’)]
在这里插入图片描述
//label[text()=“规则开关”]/parent::div/following-sibling::div/span在这里插入图片描述

下拉列表框定位及操作

  1. 首先定位到下拉列表框
  • 通过 标签的 ID 、name 定位:

from selenium.webdriver.support.ui import Select

select_element = Select(driver.find_element(By.ID, “select_id”))
select_element = Select(driver.find_element(By.NAME, “select_name”))

  • 通过 XPath 定位:

select_element = Select(driver.find_element(By.XPATH, “//select[@attribute=‘value’]”))

  1. 定位下拉列表框的元素后,对选项进行操作

使用 Select 对象提供的方法来进行操作。

select_element.select_by_index(index) # 通过索引选择选项
select_element.select_by_value(value) # 通过值选择选项
select_element.select_by_visible_text(text) # 通过可见文本选择选项

取消选择选项:

select_element.deselect_all() # 取消选择所有选项

获取已选择的选项:

selected_options = select_element.all_selected_options # 获取所有已选择的选项

示例:

在这里插入图片描述

python"> # 定位到下拉列表框然后点击展开select_element_xpath = set_up.find_element(By.ID, 'listAccounts')select_element_xpath.click()# 使用Select方法定位到Selectselect_element = Select(set_up.find_element(By.ID, 'listAccounts'))# 根据展开的可见文本选择select_element.select_by_visible_text("800001 Checking")# 根据索引选择选项select_element.select_by_index(0)# 根据value 选择选项select_element.select_by_value("800000")

http://www.ppmy.cn/embedded/24856.html

相关文章

vue3前端调用后端接口实现分页,搜索

//3个搜索获取数据分页 export function parkEnterPage( address: string, methods: string, carNumber :string, personName:string, cardStatus:string, page: number, pageSize: number ) { const res instance({ url: ${address}?carNumber${carNumber}&p…

高速应急广播校园网络广播防水音柱40-80W应急广播ip音柱

高速应急广播校园网络广播防水音柱40-80W应急广播ip音柱 SV-7042是一款网络音柱&#xff0c;具有10/100M以太网接口&#xff0c;从网络接口接收网络的音频数据解码后播放。 本网络音柱一般内置4个喇叭&#xff0c;提供立体声的音频播放。本网络音柱可直接播放来自网络的音频&…

Linux:Apache和Nginx的区别

Linux&#xff1a;Apache和Nginx的区别 图示工作过程 apache使用的是进程负责到底的工作流程&#xff0c;其特点是稳定&#xff1b;nginx使用了连接复用器这个结构&#xff0c;可以实现一个进程只负责给存储单元提出需求&#xff0c;而不需要负责到底&#xff0c;这样大大提高…

Git中单独的功能特性分支是什么含义

在Git中&#xff0c;一个"功能特性分支"&#xff08;通常简称为“特性分支”&#xff09;是指从主开发分支&#xff08;比如main或master&#xff09;独立出来的分支&#xff0c;专门用于开发一个新功能、修复一个bug&#xff0c;或者进行实验性的尝试。使用特性分支…

The Log-Structured Merge-Tree (LSM-Tree) 论文阅读笔记

原论文&#xff1a;The Log-Structured Merge-Tree (LSM-Tree) LSM-Tree的简介和关键技术要点 LSM-Tree&#xff08;Log-Structured Merge-Tree&#xff09;是一种为高吞吐量读写操作优化的数据结构&#xff0c;特别适用于写入密集型的应用场景。它由Patrick O’Neil等人开发…

Go语言的切片(slice)和数组(array)有什么不同?

文章目录 数组&#xff08;Array&#xff09;示例代码数组的缺点 切片&#xff08;Slice&#xff09;示例代码切片的优点原因和解决方案 总结 在Go语言中&#xff0c;数组和切片&#xff08;slice&#xff09;都是用来存储一系列相同类型数据的集合&#xff0c;但它们之间存在一…

基于springboot新农人交流论坛 - 源码免费

1. 研究目的 设计并实现一个基于Spring Boot的新农人交流论坛&#xff0c;旨在为新农人提供一个交流平台&#xff0c;促进农业信息的分享和交流&#xff0c;推动农村产业发展和农民增收。 2. 研究要求 a. 需求分析 充分了解新农人的需求和痛点&#xff0c;设计一个符合农村…

ArkTS开发原生鸿蒙HarmonyOS短视频应用

HarmonyOS实战课程“2024鸿蒙零基础快速实战-仿抖音App开发&#xff08;ArkTS版&#xff09;”已经于今日上线至慕课网&#xff08;https://coding.imooc.com/class/843.html&#xff09;&#xff0c;有致力于鸿蒙生态开发的同学们可以关注一下。 课程简介 本课程以原生鸿蒙Ha…