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

selenium元素定位方法介绍|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 driver
    driver.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方法定位到Select
        select_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")
相关推荐
小眼睛羊羊3 分钟前
pyinstaller打包paddleocr
python
java1234_小锋8 分钟前
基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Django+echarts))
python·数据分析·旅游
蓝婷儿9 分钟前
Python 机器学习核心入门与实战进阶 Day 4 - 支持向量机(SVM)原理与分类实战
python·机器学习·支持向量机
%d%d233 分钟前
python 在运行时没有加载修改后的版本
java·服务器·python
amazinging2 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十七天
python·学习·selenium
Freak嵌入式2 小时前
一文速通 Python 并行计算:13 Python 异步编程-基本概念与事件循环和回调机制
开发语言·python·嵌入式·协程·硬件·异步编程
一个天蝎座 白勺 程序猿2 小时前
Python练习(1)Python基础类型操作语法实战:20道实战题解与案例分析(上)
开发语言·python·学习
巨人张2 小时前
信息素养Python编程题
开发语言·python
站大爷IP2 小时前
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
python
hie988943 小时前
CentOS环境搭建-快速升级G++版本
linux·python·centos