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方法定位

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

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

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

软件测试面试文档

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

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow(265->266)--反序列化漏洞--指针引用与php://input读取请求体

Web265 源代码: error_reporting(0); include(flag.php); highlight_file(__FILE__); class ctfshowAdmin{public $token;public $password;public function __construct($t,$p){$this->token$t;$this->password $p;}public function login(){return $this…

企业贷款大揭秘:税贷VS票贷,哪个更适合你?

在金融界,资金就像是现代经济的血液,特别是对于企业的发展来说,银行的资金支持简直是不可或缺的。最近,多家银行可是动作频频,加快了资金投放的步伐,尤其是制造业、小微企业、专精特新以及“三农”这些领域…

网络编程 Linux环境 C语言实现

进程间通信的延续 跨电脑进程间通信 一、远程通信方式 电路交换------老式有线电话通信 ​ 报文交换 ​ 分组交换 支持分时机制的(分片机制)报文交换 ​现行网络大部分都是采用分组交换形式 二、网络&互联网&因特网 网络Network:多台计算机通过某种传输…

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…

微积分复习笔记 Calculus Volume 1 - 3.5 Derivatives of Trigonometric Functions

3.5 Derivatives of Trigonometric Functions - Calculus Volume 1 | OpenStax

西门子S7-200 SMART 多泵轮换功能库案例下载

通用描述 在现场使用多台风机水泵的场合,需要考虑对多台风机水泵进行轮换,因此如何合 理的对多台风机水泵进行轮换就成了一道难题,本文针对上述情况,专门开发了多 泵轮换的应用库,可以方便统计泵的运行时间&#xf…

Python print()输出颜色设置

标准格式 print("\033[显示方式;前景颜色;背景颜色m…\033[0m") 显示方式 前景颜色和背景颜色 print("\033[0;37;41m我是小杨我就这样\033[0m") print("\033[0;37;42m我是小杨我就这样\033[0m") print("\033[0;37;…

AI助理与知识库:企业新人培训的革新力量

在快速变化的商业环境中,企业新人培训模式的创新已成为提升组织效能的关键。特别是人工智能(AI)助理的引入,结合知识库的应用,为企业新人培训带来了革命性的变化。以下是对这一变革的深入探讨与前景展望,旨…

文本转语音工具 | Balabolka v2.15.0.880 便携版

Balabolka是一款功能强大的文本转语音(TTS)软件,它能够将文字转换成语音并保存为多种音频格式,如WAV、MP3、OGG或WMA。这款软件兼容多种文件格式,包括但不限于AZW、CHM、DjVu、DOC、EPUB、FB2、LIT、MOBI、ODT、PDF、P…

3.堆栈的理解

堆栈是同一段进行插入删除的线性表 (先入后出) 栈式最基础的常见的数据结构之一 进入一个新的函数的时候 会开辟一个空间,存放需要的数据 int add(int a,int b,int c) {return abc } int main() {add(1,2,3) }//add(1&#xff…

Redis 线程控制 总结

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 线程控制 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 线程控制 & 总结》(学习总结/最新最准/持续更新)《Redis &a…

https://huggingface.co/上的模型无法用linux服务器clone怎么办(只需要稍微改一下网址,就可以切换到镜像下载)

问题描述: 在ubuntu系统上,使用如下命令,克隆仓库,报无法访问错误: git clone https://huggingface.co/distilbert/distilroberta-base通用解决方案: 把下面部分更换: https://huggingface.…

Scrapy框架原理与使用流程

一.Scrapy框架特点 框架(Framework)是一种软件设计方法,它提供了一套预先定义的组件和约定,帮助开发者快速构建应用程序。框架通常包括一组库、工具和约定,它们共同工作以简化开发过程。scrapy框架是python写的 为了爬…

为什么有0.35/Tr这一信号带宽定义

从频域幅值函数可以近似认为这是一个低通滤波器模型,可以采用RC网络模型来处理,根据电路理论计算电压10%到90%所需上升时间,再根据滤波器频域特性计算幅值在-3db处的频率极限,通过两个关系式可以计算出频率极大值和上升时间关系&a…

<<机器学习实战>>15-26节笔记:逻辑回归参数估计、梯度下降及优化、模型评价指标

梯度下降缺点:有可能有鞍点(如果不是凸函数的时候),不一定能找到最小值解决方法:随机梯度下降(选一条数据)和小批量梯度下降(选几条数据这两个解决方法又会带来新问题,比…

51单片机完全学习——LCD1602液晶显示屏

一、数据手册解读 通过看数据手册我们需要知道,这个屏幕每个引脚的定义以及如何进行发送和接收。通过下面这张图我们就可以知道,这些引脚和我们的编程是有关的,需要注意的是,这里我们在接线的时候,一定要把DB0-DB7接到…

变流升压一体机:能源领域的新兴力量与优秀品牌

在当今能源转型的大背景下,变流升压一体机作为一种创新型的电力设备,正逐渐成为新能源领域的关键角色。 变流升压一体机是一种综合性很强的光伏箱式变电站设备,它将储能变流器、升压变压器、高压环网柜、低压配电箱等多种设备集成在一个集装箱…

LeetCode.冗余连接(并查集以及广度优先搜索)

684.冗余连接| 传送门:. - 力扣(LeetCode) 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中…

上线 24 小时,爆了!

产研团队(兼客服)已爆单🔥🚀💥!(bushi) 在此由衷感谢各位小伙伴的信任🤩! 还没有试用的小伙伴赶紧去围观👇️👇️👇️ …

高效数据集成案例:从聚水潭·奇门到MySQL

聚水潭奇门数据集成到MySQL的技术案例分享 在企业信息化建设中,数据集成是实现业务流程自动化和数据统一管理的关键环节。本文将分享一个具体的系统对接集成案例:如何将聚水潭奇门平台上的销售出库单数据高效、可靠地集成到MySQL数据库中,以…