selenium脚本编写及八大元素定位方法

selenium脚本编写

上篇文章介绍了selenium环境搭建,搭建好之后就可以开始写代码了

基础脚本,打开一个网址
  1. from selenium import webdriver

  2. driver = webdriver.Chrome()#打开chrome浏览器

  3. driver.get('https://www.baidu.com') #打开百度

打开本地HTML文件

上篇文章我自己写了一个html文件,放在了当前路径下

  • 第一种方式

通过绝对路径打开

  1. from selenium import webdriver

  2. driver = webdriver.Chrome()#打开chrome浏览器

  3. driver.get(r'D:\sele_study\2-selenium\day1_sele\test.html')

  • 第二种方式

通过相对路径打开

本质上也是通过方法把相对路径转为绝对路径

  1. #第一种转为绝对路径的方法

  2. from selenium import webdriver

  3. from pathlib import Path#pathlib:路径处理库

  4. driver = webdriver.Chrome()#打开chrome浏览器

  5. html = Path('./test.html')

  6. driver.get(str(html.resolve()))#Path.resolve:该方法将一些的 路径/路径段 解析为绝对路径

  7. #第二种转为绝对路径的方法

  8. from selenium import webdriver

  9. import os

  10. html = os.path.abspath('./test.html')#返回绝对路径

  11. driver = webdriver.Chrome()

  12. driver.get(html)

优雅地打开浏览器(with)

用with打开浏览器,不用手工关闭

  1. from selenium import webdriver

  2. from time import sleep

  3. with webdriver.Chrome() as driver:#with上下文管理器,不需要我去关闭

  4. driver.get('https://www.baidu.com')#打开百度

  5. sleep(5)#等5秒,自动关闭

认识webdriver对象方法和属性

初识元素定位方法

  1. #祖宗方法

  2. find_element

  3. #通过class属性的值定位(底层是css)

  4. find_element_by_class_name

  5. #√√√通过css 选择器定位(推荐,最快)

  6. find_element_by_css_selector

  7. #√通过id的值定位(底层是css)

  8. find_element_by_id

  9. #√通过a标签的文本定位(底层是XPATH)

  10. find_element_by_link_text

  11. #通过name属性的值来定位(底层是css)

  12. find_element_by_name

  13. #通过a标签的部分文本定位(模糊匹配)(底层是XPATH)

  14. find_element_by_partial_link_text

  15. #通过标签名来定位(底层是css)

  16. find_element_by_tag_name

  17. #√√通过xpath方法定位(慢)

  18. find_element_by_xpath

  19. #以下方法的用法同上,只是返回的是一组元素(列表形式)

  20. find_elements

  21. find_elements_by_class_name

  22. find_elements_by_css_selector

  23. find_elements_by_id

  24. find_elements_by_link_text

  25. find_elements_by_name

  26. find_elements_by_partial_link_text

  27. find_elements_by_tag_name

  28. find_elements_by_xpath

除了祖宗方法,其他八种定位方式被大家称为‘selenium八大元素定位’

可以配合HTML全局属性介绍来理解这些方法。

HTML全局属性介绍:https://www.w3school.com.cn/tags/html_ref_standardattributes.asp

用法示例

以下方法演示用的是我们上篇文章写的HTML文件

需要的朋友可以去上篇文章复制或公众号后台输入‘html练习’获取源文件

  • find_element_by_name

通过name属性的值来定位

  1. from selenium import webdriver

  2. from pathlib import Path

  3. from time import sleep

  4. with webdriver.Chrome() as driver:#打开chrome浏览器

  5. html = Path('./test.html')

  6. driver.get(str(html.resolve()))#Path.resolve:该方法将一些的 路径/路径段 解析为绝对路径

  7. driver.find_element_by_name('username').send_keys('admin')

  8. #找到name的值为'username'的标签,并输入'admin'

  9. sleep(5)#5秒后关闭

知识点:

1.如果遇到重复的元素,操作的永远是第一个

2.send_keys方法,不会清空原来的内容

  • find_element_by_id

通过id的值定位

  1. from selenium import webdriver

  2. import os

  3. from time import sleep

  4. with webdriver.Chrome() as driver:

  5. html = os.path.abspath('./test.html')#获取绝对路径

  6. driver.get(html)

  7. driver.find_element_by_id('username').send_keys('admin')

  8. #找到id的值为'username'的标签,并输入'admin'

  9. sleep(5)

知识点:

1.id是唯一的

2.可能会变,需要注意识别

3.首字符是数字的要注意css的表达式(后续详细介绍)

  • find_element_by_class_name

通过class属性的值定位

  1. from selenium import webdriver

  2. import os

  3. from time import sleep

  4. with webdriver.Chrome() as driver:

  5. html = os.path.abspath('./test.html')#获取绝对路径

  6. driver.get(html)

  7. # 1. 输入用户名

  8. driver.find_element_by_class_name('aa').send_keys('admin')

  9. #找到class的值为'aa'的标签,并输入'admin'

  10. # 2. 输入密码

  11. # driver.find_element_by_class_name('bb cc').send_keys('123456')--错误写法

  12. driver.find_element_by_class_name('bb').send_keys('pass')

  13. #找到class的值为'bb'的标签,输入'pass'

  14. driver.find_element_by_class_name('cc').send_keys('word')

  15. #找到class的值为'cc'的标签,输入'word'

  16. sleep(5)

知识点:

1.class也容易重复

2.class ='bb cc'规定元素的一个或多个类名,等同于class1,class2='bb','cc'

所以不能直接用driver.find_element_by_class_name('bb cc')

  • find_element_by_link_text

通过a标签的全文本定位,需要文本完全匹配

  1. from selenium import webdriver

  2. import os

  3. from time import sleep

  4. with webdriver.Chrome() as driver:

  5. html = os.path.abspath('./test.html')#获取绝对路径

  6. driver.get(html)

  7. driver.find_element_by_link_text('百度一下,你就不知道').click()

  8. #找到文本为'百度一下,你就不知道'文本的a标签,并点击

  9. sleep(5)#等待5秒关闭

  • find_element_by_partial_link_text

通过a标签的部分文本定位(模糊匹配)

  1. #方法二:模糊匹配

  2. from selenium import webdriver

  3. import os

  4. from time import sleep

  5. with webdriver.Chrome() as driver:

  6. html = os.path.abspath('./test.html')#获取绝对路径

  7. driver.get(html)

  8. driver.find_element_by_partial_link_text('必应').click()

  9. #找到包含'必应'文本的a标签,并点击

  10. sleep(5)#等待5秒关闭

知识点:

1.link_text 的两种定位方式只适用于a标签的文本

2.link_text 完全匹配

3.parti_link_text 部分(模糊)可以是开头是、包含、结尾是

4.click()点击

  • find_element_by_tag_name

通过标签名来定位,因为重复特别多,所以很少用,不做介绍。

  • find_element_by_css_selector

通过css 选择器定位(推荐,最快)

内容比较多且重要,之后单独文章做介绍。

  • find_element_by_xpath

通过xpath方法定位

内容比较多且重要,之后文章单独介绍。

 感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布

部分借鉴地址: https://support.huaweicloud.com/intl/zh-cn/bestpractice-cce/cce_bestpractice_10002.html 1.原理介绍 用户通常使用无状态负载 Deployment、有状态负载 StatefulSet等Kubernetes对象来部署业务,每个工作负载管理一组Pod。以Deployment为例&#x…

Macos m系列芯片环境下安装python3以及mysqlclient流程以及遇到的一系列问题

最近升级了生产力,换了m3的mbp,迁移项目的时候遇到的一系列python mysqlclient的环境问题,这里总结记录一下。 设备:Macbook Pro m3系统:macos Sonoma 14.6最终成功的python版本:Python3.9.1最终系统环境下…

STL-常用容器-list

1list基本概念 **功能:**将数据进行链式存储 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成:链表由一系列结点组成 结点的组成:一个是存储…

基于django的志愿者社团管理系统

大家是不是常常遇到校园社团活动组织混乱、统计繁琐的困扰?其实我以前在做毕业设计的时候也头疼这些问题。后来,我们开发了一个基于Django的志愿者社团管理系统,可以帮你轻松解决这些麻烦!📌 🚀 核心功能模…

Opensearch集群部署【docker、服务器、Helm多种部署方式】

操作系统兼容性 我们建议在 Red Hat Enterprise Linux (RHEL) 或使用systemd的基于 Debian 的 Linux 发行版上安装 OpenSearch ,例如 CentOS、Amazon Linux 2 和 Ubuntu Long-Term Support (LTS)。OpenSearch 应该适用于大多数 Linux 发行版,但我们只测…

Java题集练习4

Java题集练习4 1 异常有什么用? 用来找到代码中产生的错误 防止运行出错2 异常在java中以什么形式存在? 异常在java中以类的形式存在,分为运行时异常和编译期异常,他们都在类Exception中3 异常是否可以自定义?如何自…

衡石分析平台系统分析人员手册-导入图表库图表

导入图表库图表​ 本文讲述在仪表盘中如何使用图表库图表,如果您还不了解图表库,请先点击链接了解它的功能和作用。 在数据集市中建立图表库后,分析人员可以在应用创作中引用图表库图表,快速的进行数据分析工作。 导入图表库图…

【建造&机械】木材运输车辆检测系统源码&数据集全套:改进yolo11-GhostHGNetV2

改进yolo11-SPPF-LSKA等200全套创新点大全:木材运输车辆检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.28 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片…

ubuntu 20.04编译驱动报gcc-12 not found错误

最近在自己安装的Ubuntu 系统上编译自定义驱动,发现无法编译.ko,错误如下: 按照如下操作,发现可以解决,记录下,主要是Ubuntu缺少g-12的包 安装包以后发现可以正常编译

什么是微服务中的反应性扩展?

大家好,我是锋哥。今天分享关于【什么是微服务中的反应性扩展?】面试题?希望对大家有帮助; 什么是微服务中的反应性扩展? Reactive Extensions 也称为 Rx。这是一种设计方法,我们通过调用多个服务来收集结果…

电脑程序变化监控怎么设置?实时监控电脑程序变化的五大方法,手把手教会你!

​在现代办公和信息安全领域,实时监控电脑程序变化是一项至关重要的任务。 无论是企业内网安全、员工行为审计,还是个人电脑的隐私保护,了解并设置有效的监控方法都是必不可少的。 本文将详细介绍五种电脑程序变化监控的方法,帮助…

DEVOPS: 集群伸缩原理

概述 阿里云 K8S 集群的一个重要特性,是集群的节点可以动态的增加或减少有了这个特性,集群才能在计算资源不足的情况下扩容新的节点,同时也可以在资源利用 率降低的时候,释放节点以节省费用理解实现原理,在遇到问题的…

华为原生鸿蒙操作系统的发布有何重大意义和影响:

#1024程序员节 | 征文# 一、华为原生鸿蒙操作系统的发布对中国的意义可以从多个层面进行分析: 1. 技术自主创新 鸿蒙操作系统的推出标志着中国在操作系统领域的自主创新能力的提升。过去,中国在高端操作系统方面依赖于外国技术,鸿蒙的发布…

outlook创建新账户时报错2603、2604的解决办法

全新的戴尔笔记本电脑,自带的Win11家庭版,安装ms office 2021也顺利完成。 但是奇怪的是,只有其中一台笔记本电脑,OUTLOOK无法添加新账户。 但是这个账号在WEB端登录正常,由于是新入职的员工,根据以往经验&…

Python小白学习教程从入门到入坑------第十八课 异常模块与包【上】(语法基础)

一、异常 在Python中,异常(Exception)是一种用于处理在程序运行时可能发生的错误情况的机制 异常允许程序在检测到错误时不是简单地崩溃,而是能够优雅地处理这些错误,可能包括记录错误信息、清理资源、或者向用户提…

QT界面开发--我的第一个windows窗体【菜单栏、工具栏、状态栏、铆接部件、文本编辑器、按钮、主界面】

经过前面的铺垫,今天我们就开始我们图形化界面之旅了,我们的第一个窗体主要包括:菜单栏、状态栏、工具栏、铆接部件、还有Qt提供的一些主窗体的API。 第一部分:主界面(QMainWindow) 当创建好项目后,我们直接运行&…

logdata-anomaly-miner:一款安全日志解析与异常检测工具

关于logdata-anomaly-miner logdata-anomaly-miner是一款安全日志解析与异常检测工具,该工具旨在以有限的资源和尽可能低的权限运行分析,以使其适合生产服务器使用。 为了确保 logdata-anomaly-miner的正常运行,推荐安装了python > 3.6的…

Qt 文本文件读写与保存

Qt 文本文件读写与保存 开发工具&#xff1a;VS2013 QT5.8 设计UI界面&#xff0c;如下图所示 sample7_1QFile.h 头文件&#xff1a; #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample7_1QFile.h"class sample7_1QFile : public QMainWin…

中国人寿财险青岛市分公司:保障民生,传递关爱

中国人寿财险青岛市分公司以保障民生为使命&#xff0c;传递关爱与温暖。 在健康险领域&#xff0c;公司为市民提供全面的医疗保障。从重大疾病保险到普通医疗保险&#xff0c;满足不同客户的需求。通过与医疗机构合作&#xff0c;为客户提供便捷的就医服务和理赔服务&#xf…

Linux下的文件IO操作

目录 1.前导 1.1文件知识 1.2对比一下文件操作和重定向 1.2.1输入重定向 1.2.2追加重定向 1.3当前路径 1.4stdin stdout stderr 2.文件操作的系统调用接口 2.1.open()打开文件 2.1.2.flags参数 2.1.3.mode参数 2.1.3 umask()函数 2.2.write()向文件写入 ​编辑 2…