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

ops/2024/11/8 20:47:42/

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/ops/24770.html

相关文章

服务器根据功能划分有哪几种?

服务器根据功能来进行划分的话有邮件服务器、代理服务器和FTP服务器等多种类型&#xff0c;接下来就主要来了解一下这些服务器的作用有哪些吧&#xff01; 一、邮件服务器 邮件服务器是电子邮件系统的核心组件&#xff0c;主要负责电子邮件的发送和接收&#xff0c;当用户创建…

OC 常用第三方框架使用记录二

JPImageresizerView 录音转文字&#xff0c;去水印用到了镜像 #import "JPImageresizerView.h"###裁剪图片 JPImageresizerConfigure *configure [JPImageresizerConfigure defaultConfigureWithImage:self.orginImage make:^(JPImageresizerConfigure *configure…

【迅投qmt系列】2、历史数据获取

1、基本思想 在 xtquant 中&#xff0c;历史数据要先下载&#xff08;download_history_data&#xff09;到本地的缓存文件中&#xff0c;之后才能获取&#xff08;get_market_data&#xff09;使用。 如果确认之前已经下载过&#xff0c;且数据完整&#xff0c;那么后续使用前…

深入理解堆机制:C语言中的数据结构基础

目录 摘要&#xff1a; 第一章&#xff1a;堆的定义和特性 第二章&#xff1a;堆的实现和操作 第三章&#xff1a;堆的实际应用 技术总结&#xff1a; 摘要&#xff1a; 本文旨在深入探讨C语言中的堆机制&#xff0c;为C语言开发者提供关于堆数据结构的全面理解。文章首…

数据结构--栈与队列【您的关注是我创作的动力!】

文章目录 栈什么是栈&#xff1f;栈的具体实现 队列什么是队列&#xff1f;队列的实现 栈 什么是栈&#xff1f; 栈也是顺序表的一种&#xff0c;栈的逻辑实现是先进后出&#xff08;后进先出&#xff09;就跟子弹夹一样。 具体逻辑就是它只允许在固定的一端进行数据的插入与…

[1688]jsp工资投放管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 工资投放管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

LeetCode in Python 10. Regular Expression Matching (正则表达式匹配)

正则表达式匹配涉及到两个字符串的匹配问题&#xff0c;类似于寻找最大公共子串&#xff0c;可使用动态规划思想解决。重点和难点在于如何构建正确的状态转移方程。 示例&#xff1a; 图1 正则表达式匹配输入输出 代码&#xff1a; class Solution:def isMatch(self, s: st…

K8s初次入门

初步:搭建k8s集群 k8s 集群主机清单 主机名ip地址master1.50node-00011.51node-00021.52node-00031.53node-00041.54node-00051.55harbor1.30事先准备 所有的k8s集群主机卸载防火墙和禁用swap交换空间(docker、k8s建议禁用swap) 安装工具 dnf install -y kubeadm kubelet ku…