Python自动化测试——元素定位

1.selenium简介

Selenium是一个用于Web应用程序测试的工具。Selenium是直接运行在浏览器中,模拟用户操作web界面。支持多平台:windows、linux、MAC ,支持多浏览器:ie、firefox、chrome等浏览器。

2. 启动浏览器

# 导入webdriver模块
from selenium import webdriver
# 创建driver对象,指定Chrome浏览器
driver = webdriver.Chrome()
# 创建driver对象,指定Firefox浏览器
driver = webdriver.Firefox()
# 创建driver对象,指定ie浏览器
driver = webdriver.Ie()

3. 元素定位

为了方便我们查找到相应的元素位置,selenium中的webdriver提供了几种元素定位方式。常用的有以下8种元素定位方式:

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

3.1 id和name定位

id和name是我们常用的元素定位方法,在大多数情况下,开发人员为了区分不同的控件,使其取的名称有意义,一般都会使用id和name这两个属性。

比如这两个html代码:

<input type="text" id="username" user="用户名" class="center_font"> 
<input type="password" name="password" size="19" pass="密码"> 

利用html代码中的id和name属性对元素进行定位:

通过id=”username”来定位: driver.find_element_by_id("username") 
通过name=”password”来定位: find_element_by_name("password") 

3.1.1 tag name和class name定位

开发人员除了用id和name两个元素外,还会使用class name和tag name 这样的属性

<div id="search" class="search" style="margin-top:2px"> 
<form id="t" onsubmit=" returnname="s" method="GET"  action="/search"> 
<input id="kw" class="kw" type="text" name="word" autocomplete="off"> 

(1)通过元素中带的class属性对元素进行定位:

通过class=”search”来定位: find_element_by_class_name("search")
通过class=”kw”来定位: find_element_by_class_name("kw") 

(2)通过tag标签名对元素进行定位:

通过<div>来定位: find_element_by_tag_name("div") 
通过<form>来定位: find_element_by_tag_name("form") 
通过<input>来定位: find_element_by_tag_name("input") 

tag name由于出现的次数太多了,所以一般不用这个来定位元素。

3.1.2 link text与partial link text定位

有时候需要操作的元素是一个文字链接,那么我们可以通过link text或partial link text进行元素定位。

<ahref="http://news.rich.com" name="ts_news">新闻</a> 
<ahref="http://tieba.rich.com"name="ts_tieba">贴吧</a> 
<ahref="http://zhidao.rich.com"name="ts_zhidao">知道</a> 

(1)通过link text定位元素:

find_element_by_link_text("新闻")
find_element_by_link_text("贴吧")
find_element_by_link_text("知道") 

(2)通过partial link text来定位:

find_element_by_partial_link_text("新") 
find_element_by_partial_link_text("吧") 
find_element_by_partial_link_text("知") 

对比:这两种定位方式都是通过文字链接来获取所需的元素位置,一般页面上是不会出现两个相同的链接,这种方式也是一种比较简单的定位方式。

3.1.3 XPath定位

XPath是一种在XML文档中定位元素的语言。xpath定位可分为绝对路径定位和相对路径定位。

以一个层级关系页面定位为例:

<html xmlns="http://www.zn.com/xhtml" lang="zh-cn">
<body><div id="operate_zn" class="zn" style="width: 64px;" title=""><a href="javascript:void(0)" class="zn-single" tabindex="-1"><span>or</span></a><div class="zn-drop" style="left: -9000px; width: 62px; top: 0px;"><div class="zn-search" style=""><input id="input" type="text" name="operate_zn" autocomplete="off" style="width: 27px;"></div></div></div>
</body>
</html>

比如我们要定位输入框input中的元素:

(1)通过绝对路径来定位:

find_element_by_xpath("/html/body/div/div/div/input") 

(2)通过相对路径来定位:

通过自身的id属性定位: find_element_by_xpath("//input[@id=’input’]") 
通过上级目录的id属性定位: find_element_by_xpath("//div[@id=’operate_zn’]/div/div/input") 

对比:当我们很难定位到一个元素时,就可以选择绝对路径和相对路径的方式进行定位,但是绝对路径有一个缺点,就是当元素在很多级目录下时,我们要写很长的路径,而且一旦路径变化,就要修改代码,不利于代码的维护。

3.1.4 CSS定位

CSS定位是一种比较灵活获取控件位置的方式,一般情况下定位速度要比XPath快。CSS使用选择器来为页面元素绑定属性,这些选择器可以被selenium用作另外的定位策略。

CSS选择器常见语法:

 以这个html代码为例:

<input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd"/> 
(1)以#号表示id的属性: find_element_by_css_selector("#kw") 
(2)以.号表示class的属性: find_element_by_css_selector(".s_ipt")
(3)以层级关系来定位属性: find_element_by_css_selector("form#form>span>input") 

这里就举了三个类型,css定位方式比较多,如果有需要的话,可以继续深入学习

总结:

自动化测试中比较重要的其实就是元素定位,也是比较难的。我们可以根据不同的情况,选择比较合适的元素定位方式。虽然XPath和CSS可以定位到复杂的元素,但相对于id/name元素定位来说代码的维护成本要高一点。相对来说,id/name的定位方式是比较容易上手的,很适合新手。 

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

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

相关文章

Apache Airflow (十四) :Airflow分布式集群搭建及测试

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

OBS Studio 30.0 正式发布:支持 WebRTC

导读OBS Studio 30.0 已正式发布。此版本移除了对 Ubuntu 20.04、Qt 5 和 FFmpeg 4.4 之前版本的支持。 OBS Studio 30.0 已正式发布。此版本移除了对 Ubuntu 20.04、Qt 5 和 FFmpeg 4.4 之前版本的支持。 主要变化包括&#xff1a; 支持 WebRTC&#xff08;详情查看 OBS Stu…

整体迁移SVN仓库到新的windows服务器

一、背景 公司原有的SVN服务器年代比较久远经常出现重启情况&#xff0c;需要把SVN仓库重新迁移到新的服务器上&#xff0c;在网上也搜到过拷贝Repositories文件直接在新服务器覆盖的迁移方案&#xff0c;但考虑到原有的操作系统和现有的操作系统版本不一致&#xff0c;SVN版本…

python的制图

测试数据示例&#xff1a; day report_user_cnt report_user_cnt_2 label 2023-10-01 3 3 欺诈 2023-10-02 2 4 欺诈 2023-10-03 6 5 欺诈 2023-10-04 2 1 正常 2023-10-05 4 3 正常 2023-10-06 4 4 正常 2023-10-07 2 6 正常 2023-10-08 3 7 正常 2023-10-09 3 12 正常 2023-…

代码随想录刷题题Day2

刷题的第二天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day2 任务 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵 II 1 有序数组的平方&#xff08;重点&#xff1a;双指针…

华为电视盒子 EC6108V9C 刷机成linux系统

场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 家里装宽带的时候会自带电视盒子&#xff0c;但是由于某些原因电视盒子没有用&#xff0c;于是就只能摆在那里吃土&#xff0c;闲来无事&#xff0c;搞一下 问题描述 提示&#xff1a;这里描述项目中遇到…

使用yolov7进行多图像视频识别

1.yolov7你可以让你简单的部署,比起前几代来说特别简单 #下面是我转换老友记的测试视频,可以看到几乎可以准确预测 2.步骤 1.在github官网下载代码 https://github.com/WongKinYiu/yolov7 2.点击下载权重文件放到项目中 3.安装依赖,我的python版本是3.6的 pip install -r requ…

无mac电脑生成uniapp云打包私钥证书的攻略

uniapp顾名思义是一个跨平台的开发工具&#xff0c;大部分uniapp的开发者&#xff0c;其实并没有mac电脑来开发&#xff0c;但是生成ios的证书&#xff0c;官网的教程却是需要mac电脑的&#xff0c;那么有没有办法无需mac电脑即可生成uniapp云打包的私钥证书呢&#xff1f; 下…

【计算机网络】14、DHCP

文章目录 一、概述1.1 好处 二、概念2.1 分配 IP2.2 控制租赁时间2.3 DHCP 的其他网络功能2.4 IP地址范围和用户类别2.5 安全 三、DHCP 消息3.1 DHCP discover message3.2 DHCP offers a message 如果没有 DHCP&#xff0c;IT管理者必须手动选出可用的 ip&#xff0c;这太耗时了…

和鲸科技与国科环宇建立战略合作伙伴关系,以软硬件一体化解决方案促进科技创新

近日&#xff0c;在国科环宇土星云算力服务器产品发布会暨合作伙伴年度会上&#xff0c;和鲸科技与国科环宇正式完成战略伙伴签约仪式&#xff0c;宣布达成战略合作伙伴关系。未来&#xff0c;双方将深化合作&#xff0c;充分发挥在产品和市场方面的互补优势&#xff0c;为企事…

什么是工业物联网(IOT)?这样的IOT平台你需要吗?——青创智通

物联网(IOT)是指在互联网上为传输和共享数据而嵌入传感器和软件的互联设备的广泛性网络。这允许将从物理对象收集的信息(数据)存储在专用服务器或云中。通过分析这些积累的信息&#xff0c;通过提供最优的设备控制和方法&#xff0c;可以实现一个更安全、更方便的社会。在智能家…

【NodeJS】 API Key 实现 短信验证码功能

这里使用的平台是 短信宝整体来讲还是挺麻烦的平台必须企业才行&#xff0c;个人是无法使用该平台的 平台必须完成 身份信息认证 和 企业认证 这里就需要 “营业执照”了 &#xff0c;没有 “营业执照” 的朋友还是后退一步吧 后端我用的是NodeJS &#xff0c;使用第三方库 ro…

【办公软件】电脑开机密码忘记了如何重置?

这个案例是家人的电脑&#xff0c;已经使用多年&#xff0c;又是有小孩操作过的&#xff0c;所以电脑密码根本不记得是什么了&#xff1f;那难道这台电脑就废了吗&#xff1f;需要重新装机吗&#xff1f;那里面的资料不是没有了&#xff1f; 为了解决以上问题&#xff0c;一般…

【云原生系列】Kubernetes知识点

目录 概念 基础架构 单master节点 多master节点 组件 Master节点核心组件 其他组件 请求发送流程 插件 核心资源 调度资源 Pod 创建pod组件间调用流程 pod生命周期&#xff1a; 初始化容器 镜像拉取策略 重启策略 钩子函数 探针 探针的实现方式 DownwardAP…

Git的介绍和下载安装

Git的介绍和下载安装 概述 Git是一个分布式版本控制工具, 通常用来管理项目中的源代码文件(Java类、xml文件、html页面等)进行管理,在软件开发过程中被广泛使用 Git可以记录文件修改的历史记录并形成备份从而实现代码回溯, 版本切换, 多人协作, 远程备份的功能Git具有廉价的…

FPGA falsh相关知识总结

1.存储容量是128M/8 Mb16MB 2.有256个sector扇区*每个扇区64KB16MB 3.一页256Byte 4.页编程地址0256 5&#xff1a;在调试SPI时序的时候一定注意&#xff0c;miso和mosi两个管脚只要没发送数据就一定要悬空&#xff08;处于高组态&#xff09;&#xff0c;不然指令会通过两…

年终好价节入手什么数码合适?盘点23年度值得入手的数码好物

各位科技控和数码迷&#xff01;时间过得飞快&#xff0c;一眨眼2023年就要过去了&#xff0c;说到年底&#xff0c;当然少不了年终好价节啦&#xff01;这时候正是更新你的数码装备、升级生活品质的绝佳时机。别管你是不是科技控&#xff0c;工作狂还是生活追求者&#xff0c;…

JavaWeb服务器详解和后端分层解耦

JavaWeb HTTP协议请求数据格式响应数据格式协议解析 Web服务器请求响应请求参数的接收响应 分层解耦IOC&DI入门IOC详解 HTTP协议 超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 特点&#xff1a; 基于TCP协议&#xff1a;面向连接&#xff0c;安全 …

npm WARN npm npm does not support Node.js v13.9.0

Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。C:\Users\Administrator>node -v v13.9.0C:\Users\Administrator>npm -v npm WARN npm npm does not support Node.js v13.9.0 npm WARN npm You should probably upgrade to a newe…

正则表达式回溯陷阱

一、匹配场景 判断一个句子是不是正规英文句子 text "I am a student" 一个正常的英文句子如上&#xff0c;英文单词 空格隔开 英文单词 多个英文字符 [a-zA-Z] 空格用 \s 表示 那么一个句子就是单词 空格&#xff08;一个或者多个&#xff0c;最后那个单词…