Python selenium find_element()示例详解

news2024/10/5 15:52:01

selenium有以下定位方式:

1

2

3

4

5

6

7

8

driver.find_element_by_id(‘id')

driver.find_element_by_xpath('xpath')

driver.find_element_by_link_text('link_text')

driver.find_element_by_partial_link_text('partial_link_text')

driver.find_element_by_name('name')

driver.find_element_by_tag_name('tag_name')

driver.find_element_by_class_name('class_name')

driver.find_element_by_css_selector('css_selector')

但我们看下源码:

D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\remote\webdriver.py

可以看到,上面那些定位方式,实际上都是调用的driver.find_element(by, value)

我们继续看下find_element()的源码,大部分方法最终全是通过By.CSS_SELECTOR来实现的查找

那By又都有哪些条件呢?

D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\common\by.py

继续看源码,可以看到下面8种

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

所以我们以后就都只用find_element()就好了,因为最终实际上也都是调用的这个方法。

简单封装一下,以后就记住find_element()一个方法即可。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

from selenium.common.exceptions import TimeoutException

from selenium.webdriver.support.ui import WebDriverWait

from appium import webdriver

class BasePage(object):

    def split_locator(self, locator):

        """

        分解定位表达式,如'css,.username',拆分后返回'css selector'和定位表达式'.username'(class为username的元素)

        :param locator: 定位方法+定位表达式组合字符串,如'css,.username'

        :return: locator_dict[by], value:返回定位方式和定位表达式

        """

        by = locator.split(',')[0]

        value = locator.split(',')[1]

        locator_dict = {

            'id': 'id',

            'name': 'name',

            'class': 'class name',

            'tag': 'tag name',

            'link': 'link text',

            'plink': 'partial link text',

            'xpath': 'xpath',

            'css': 'css selector',

        }

        if by not in locator_dict.keys():

            raise NameError("wrong locator!'id','name','class','tag','link','plink','xpath','css',exp:'id,username'")

        return locator_dict[by], value

    def wait_element(self, locator, sec=30):

        """

        等待元素出现

        :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'

        :param sec:等待秒数

        """

        by, value = self.split_locator(locator)

        try:

            WebDriverWait(self.driver, sec, 1).until(lambda x: x.find_element(by=by, value=value),message='element not found!!!')

            log.info(u'等待元素:%s' % locator)

        return True

        except TimeoutException:

            return False

        except Exception, e:

            raise e

     

    def get_element(self, locator, sec=60):

        """

        获取一个元素

        :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'

        :param sec:等待秒数

        :return: 元素可找到返回element对象,否则返回False

        """

        if self.wait_element(locator, sec):

            by, value = self.split_locator(locator)

            try:

                element = self.driver.find_element(by=by, value=value)

                log.info(u'获取元素:%s' % locator)

                return element

            except Exception, e:

                raise e

        else:

            return False

    def get_elements(self, locator):

        """

        获取一组元素

        :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'

        :return: elements

        """

        by, value = self.split_locator(locator)

        try:

            elements = WebDriverWait(self.driver, 60, 1).until(lambda x: x.find_elements(by=by, value=value))

            log.info(u'获取元素列表:%s' % locator)

            return elements

        except Exception, e:

            raise e

以后调用,先定义元素,如

button = "id,su" # 页面上id为su的元素

在用例中查找时,只要写

find_element(button)

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

Java中SpringBoot组件集成接入【Knife4j接口文档】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性(@ApiModel和@ApiModelProperty)2.控制类及方法(@Api、@ApiOperation、@ApiImplicitParam、 @ApiResponses)3.@ApiOperationSupport注解未生效的解决方法5.…

联盛德-安全物联网芯片w800

联盛德-安全物联网芯片w800 前言一、w800简介?芯片外观 总结 前言 本文介绍w800的基本信息,详细规格,后续有时间会介绍如何适配openharmony的过程。 一、w800简介? W800 芯片是一款安全 IoT Wi-Fi/蓝牙 双模 SoC 芯片。支持 2.…

Tracert 与 Ping 程序设计与实现(2024)

1.题目描述 了解 Tracert 程序的实现原理,并调试通过。然后参考 Tracert 程序和计算机网络教材 4.4.2 节, 计算机网络 课程设计指导书 2 编写一个 Ping 程序,并能测试本局域网的所有机器是否在线,运行界面如下图所示的 QuickPing …

Three.js 纹理贴图的实现

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 纹理贴图简介 当我们创建一个网格时,比如我们不起眼的立…

跨境电商进化论:从B2C到C2M的创新商业模式

跨境电商在过去几年中经历了巨大的变革,从传统的B2C模式逐渐演变为创新的C2M模式,为全球商业带来了新的商业范式。本文将探讨跨境电商的发展历程,着重分析C2M模式的涌现,以及它如何重新定义了消费者和制造商之间的关系&#xff0c…

字节8年经验之谈!一文从0到1带你入门接口测试【建议收藏】

扫盲内容: 1.为什么要做接口测试? 2.怎样做接口测试? 3.接口测测试点是什么? 4.接口测试都要掌握哪些知识? 5.其他相关知识? 一.为什么要做接口测试? ①.越底层发现bug,它的修复…

香港证监会最新公告:投资虚拟资产的基金应遵守哪些规定?

撰文:Sean,Techub News 点击查看TechubNews原文链接 12 月 22 日,香港证监会发布了「关于香港证监会授权基金投资虚拟资产的通函」和「有关中介人的虚拟资产相关活动的联合通函」,在「关于香港证监会授权基金投资虚拟资产的通函…

求求你,别再乱用@Transactional了

求求你,别再乱用Transactional了 文章目录 🔊先看个问题📕情况1情况1结果 🖥️情况2情况2结果 📜 情况三情况3结果 📘情况4情况4结果 🔖先说结论情况1结果情况2结果情况3结果情况4结果&#x1f…

春晖团队开展“爱心陪伴.读书会”主题 活动在蟠龙社区

在共青团桐梓县委的指导下,桐梓县春晖行动志愿者协会“伙伴计划”项目团队连续2天和青少年小朋友一起在燎原镇蟠龙社区的乡村复兴少年宫组织开展“爱心陪伴.读书会”主题活动。 1月6日,志愿者们提前到活动场地,将团中央发放的报刊书籍、益智玩…

Qt之基本数据类型

Qt 基本数据类型定义在#include <QtGlobal>中&#xff0c;如表下表所示。 (1)打开Qt Creator&#xff0c;新建一个控制台项目&#xff0c;项目名为test。 (2)在 main.cpp 中输入如下代码: #include <QCoreApplication> #include <QtGlobal> int main(int…

selenium3+python3环境搭建

1、首先安装火狐浏览器 有单独文章分享怎么安装 2、搭建python环境 安装python&#xff0c;安装的时候把path选好&#xff0c;就不用自己在配置&#xff0c;安装方法有单独文档分享 安装好以后cmd打开输入python查看是否配置好 3、安装pip 一般python会默认带一个&#x…

大模型日报-20240109

在大模型&#xff08;LLM&#xff09;爆发的当下&#xff0c;我们能不能把不同的模型搭建起来&#xff0c;起到 11>2 的效果&#xff1f; https://mp.weixin.qq.com/s/_V228WbPr3WKhBtIs7icZQ 如今的大语言模型&#xff08;LLM&#xff09;仿佛一个全能战士&#xff0c;能进…

创建springBoot模块没有目录结构

我用2023版的idea创建模块的时候会出现一些奇奇怪怪的错误&#xff0c;有时候没有项目目录结构&#xff0c;有时候项目的的目录都是普通文件。接下来简单介绍下解决方案。 选择有问题的模块&#xff0c;点击&#x1f197;即可。

Umbraco:从产品介绍到实战应用

一、产品介绍 Umbraco是一个开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;以其灵活性和可扩展性而闻名。Umbraco允许开发人员根据需要定制系统&#xff0c;同时为非技术人员提供了一个直观的界面来管理网站内容。Umbraco诞生于丹麦&#xff0c;经过多年的发展&a…

软件测试概念及分类整理汇总

前言 测试小伙伴在谈论软件测试分类&#xff0c;五花八门的分类&#xff0c;眼花缭乱。因为将各个维度划分的内容都整到一块了&#xff0c;在加上各自不同的见解与补充&#xff0c;各种冲突...... Findyou我经过多年测试总结基本定为4类测试(最多5类&#xff0c;自动化或者兼容…

three.js实现雷达扫描效果(纹理贴图)

three.js实现雷达扫描效果&#xff08;纹理贴图&#xff09; 图例 步骤 创建两个平面&#xff0c;分别纹理贴图&#xff0c;底图模型.add&#xff08;光波模型&#xff09;关闭材质的深度测试光波旋转 代码 <template><div class"app"><div ref&q…

从零开发短视频电商 Tesseract OCR 的 Java 拓展库 javacpp-presets

文章目录 简介添加依赖识别示例示例一 识别本地图片示例二 识别图像中的各个组件&#xff08;比如文本行&#xff0c;单词&#xff0c;或单个字符&#xff09;示例三 使用迭代器遍历识别结果及其选择项示例四 方向和脚本检测示例五 结果迭代器示例六 设置引擎、页面分割模式、语…

从零学Java - String类

Java String类 文章目录 Java String类1 String1.1 常用两种创建方式1.2 比较两种创建方式1.3 字符串不可变性1.4 面试题 2 常用方法2.1 练习 3 可变字符串3.1 常用方法3.2 验证StringBuilder的高效性3.3 练习3.4 面试题: 4 正则表达式4.1 元字符4.2 其他字符4.2.1 预定义字符4…

创新百喻,综合性思维和分析性思维

创新百喻&#xff0c;综合性思维和分析性思维 不知道您注意没有&#xff0c;在创新中&#xff0c;人们的思维方式是不一样的&#xff0c;有综合性思维和分析性思维之分。总的来说&#xff0c;综合性思维适合创造原来没有的事物&#xff0c;而分析性思维擅长改进和提高&#xf…

供应链 | 顶刊OR论文精读:供应链网络的中断与重连

Disruption and Rerouting in Supply Chain Networks 原文作者信息 John R. Birge, Agostino Capponi, Peng-Chu Chen (2022) Disruption and Rerouting in Supply Chain Networks. Operations Research 71(2):750-767. https://doi.org/10.1287/opre.2022.2409 原文摘要总结…