自动化测试(二)selenium八大获取元素方法及对象操作

目录

webdriver API

脚本实例

元素的定位

1. 通过id定位:

2. 通过name方式定位

3. 通过tag name(标签名)定位

4. 通过class name (类名)方式定位

5. 通过CSS 方式定位

6. 通过xpath方式定位

7. link text定位

8. Partial link text 定位

操作测试对象

 鼠标点击与键盘输入

submit 提交表单

text 获取元素文本


上一篇主要讲解了自动化测试的环境。最后用 IDE 生成了一个样例。这节课将详细的介绍 webdriver 的常用的API🤦‍♀️
selenium+python环境没有配置好的可以先看我上两篇配置环境噢。
selenium环境配置: 自动化测试(一)配置selenium环境(带图文,防止踩坑)-CSDN博客
python环境配置: 自动化测试(前奏)Python环境配置教程(带图文)-CSDN博客

webdriver API

脚本实例

一个简单自动化脚本的构成:
# coding = utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver =webdriver.Chrome()
driver.get('http://www.baidu.com')
time.sleep(3)
driver.find_element(By.ID,'kw').send_keys('软件测试')
time.sleep(3)
driver.find_element(By.ID,'su').click()
time.sleep(3)
driver.quit()
脚本解析:
coding = utf-8
防止乱码,在编辑器里面可以不用加,因为编辑器默认的就是 UTF-8 模式。
from selenium import webdriver
导入 webdriver 工具包,这样就可以使用里面的 API
driver =webdriver.Chrome()
获得被控制浏览器的驱动,这里是获得Chrome 的,当然还可以获得其他 浏览器,不过要想使这一段代码有效,必须安装相应的浏览器驱动。
driver.get('http://www.baidu.com')

打开百度这个网址。

driver.find_element(By.ID,'kw').send_keys('软件测试')

根据id寻找kw这个元素,在百度里面,这个kw的元素是搜索框,然后send_keys是输入指令,输入“软件测试”

driver.find_element(By.ID,'su').click()

这一段是根据id找到su这个按钮,click代表点击

driver.quit()

关闭浏览器

总结上面代码的逻辑是,在百度中搜索“软件测试”,并点击搜索按钮

driver.close()

 上面一行代码也能够关闭窗口,和quit的区别是:

close 方法关闭当前的浏览器窗口, quit 方法不仅关闭窗口,还会彻底的退出 webdriver ,释放与 driverserver之间的连接。所以简单来说 quit 是更加彻底的 close quit 会更好的释放资源。

元素的定位

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。
那么一个对象也有类似的属性,我们可以通过这些属性找到这对象。
注意:不管用那种方式,必须保证页面上该属性的唯一性
webdriver 提供了一系列的对象定位方法,常用的有以下几种:
id
name
class name
link text
partial link text
tag name
xpath
css selector
我们可以看到,一个百度的输入框,可以用这么多种方式去定位。
<input type="text" class="s_ipt" name="wd" id="kw" 
maxlength="100" autocomplete="off">

1. 通过id定位:

        id是页面元素的属性,我们最常用元素定位方式,但是不是所有的元素都有 id 的。如果一个元素有 id 属 性,那么一般在整个页面是唯一的。所以我们一般可以用id 来唯一的定位到这个元素。
通过前端工具,例如 Chrome 浏览器的 F12 ,找到了百度输入框的属性信息,如下:
<input type="text" class="s_ipt" name="wd" id="kw" 
maxlength="100" autocomplete="off">
属性 id=”kw” ,通过下面这行代码就能定位到输入框。
driver.find_element(By.ID,'kw').send_keys('软件测试')

2. 通过name方式定位

如果这个元素有 name ,并且元素的 name 命名在整个页面是唯一的,那么我们可以用 name 来定位这个元素。
用上面百度输入框的例子,其中元素的属性 name=”wd”
通过driver.find_element(By.NAME,'wd')函数同样也可以定位到百度输入框
driver.find_element(By.NAME,'wd').send_keys('软件测试')

3. 通过tag name(标签名)定位

从上面的百度输入框的属性信息中,我们看到,不单单只有 id name 两个属性, 比如 class tag

name(标签名) input 就是一个标签的名字,而class="s_ipt"是类名。

在这里要注意的是,不是所有的元素用 tag name或者 class name来定位元素,首先要保证该元素的这两种属性在页面上是唯一的,才能够精准定位。

driver.find_element(By.TAG_NAME,'input').send_keys('软件测试')

注意:上面这个可能执行不成功,因为标签名可能不唯一🤦‍♀️

4. 通过class name (类名)方式定位

driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('软件测试')

5. 通过CSS 方式定位

CSS(Cascading Style Sheets) 是一种语言,它被用来描述 HTML XML 文档的表现。
CSS 使用选择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策略。

CSS 的比较灵活可以选择控件的任意属性,上面的例子中:driver.find_element(By.CSS_SELECTOR,'#kw')选择取百度输入框的id 属性来定义

CSS 的获取可以用 chrome F12 开发者模式中 Element- 右键 -copy-copy selector 来获取
driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('软件测试')

6. 通过xpath方式定位

什么是XPathhttp://www.w3.org/TR/xpath/

XPath 基础教程: http://www.w3schools.com/xpath/default.asp
XPath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看做 XML 的一种实现,所以 selenium 用 户可是使用这种强大语言在web 应用中定位元素。
XPath 扩展了上面 id name 定位方式,提供了很多种可能性。
XPATH 的获取可以用 chrome F12 开发者模式中 Element- 右键 -copy-copy xpath 来获取
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('软件测试')

7. link text定位

有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过链接内容,也就是 link text 来定位。
需要注意的是链接内容必须这个页面唯一,否则会报错。
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element(By.LINK_TEXT,"hao123").click()
browser.quit()

8. Partial link text 定位

通过部分链接定位,这个有时候也会用到,拿上面的例子,我可以只用链接的一部分文字进行匹配:
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element(By.PARTIAL_LINK_TEXT,"hao123").click()
browser.quit()

操作测试对象

前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个元素进行操作。是鼠标点击还是键盘输入,或者清除元素的内容,或者提交表单等。这个取决于定位元素需要进行的下一步操作。
webdriver 中比较常用的操作对象的方法有下面几个:

1. click 点击对象
2. send_keys 在对象上模拟按键输入
3. clear 清除对象输入的文本内容
4. submit 提交
5. text 用于获取元素的文本信息

 鼠标点击与键盘输入

#coding=utf-8
from selenium import webdriver
import timefrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
driver.find_element(By.ID,"kw").send_keys("test")
time.sleep(2)
driver.find_element(By.ID,"kw").clear()
driver.find_element(By.ID,"kw").send_keys("selenium")
time.sleep(2)
#通过submit() 来操作
driver.find_element(By.ID,"su").submit()
time.sleep(3)
driver.quit()
click() 用于点击一个按钮。
clear() 用于清除输入框的内容,比如百度输入框里默认有个 请输入关键字 的信息,再比如我们的登录框一般默认会有“ 账号 ”“ 密码 这样的默认信息。 clear 可以帮助我们清除这些信息。

submit 提交表单

打开百度搜索页面,按钮 百度一下 元素的类型 type=“submit” ,所以把 百度一下 的操作从 click 换成 submit 可以达到相同的效果:
driver.find_element(By.ID,"su").submit()

text 获取元素文本

text 用于获取元素的文本信息
#coding=utf-8
from selenium import webdriver
import timefrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
#id = cp 元素的文本信息
data=driver.find_element(By.ID,"bottom_layer").text
print(data) #打印信息
time.sleep(3)
driver.quit()
输出:
©2018 Baidu 使用百度前必读 意见反馈 京ICP证030173号

本节就到这里啦,你们的支持就是我前进的动力,希望大家多多支持噢🤦‍♀️🤦‍♂️🤷‍♀️🤷‍♂️🎈

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

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

相关文章

[原创][R语言]股票分析实战:周级别涨幅趋势的相关性

[简介]常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、De…

【PostgreSQL】从零开始:(一)初识PostgreSQL

从零开始:&#xff08;一&#xff09;初识PostgreSQL PostgreSQL数据库介绍为什么使用 PostgreSQL&#xff1f;那么多最终用户,云厂商为什么要贡献核心代码&#xff1f;基于PostgreSQL底层开发的好处&#xff1a;为什么要学习PostgreSQL&#xff1f;截止本文发布之日&#xff0…

将一个带头结点单链表 A分解为A 和 B 使得 A 中为奇数项元素,B 中为偶数项元素,保持其相对顺序不变。

题目描述&#xff1a;将一个带头结点单链表 A分解为A 和 B 使得 A 中为奇数项元素&#xff0c;B 中为偶数项元素&#xff0c;保持其相对顺序不变。 void EvenAndOdd(LinkList &A){LinkList *B (LinkList)malloc(sizeof(LNode));B->next NULL;LNode *p A->next;LN…

数据库 02-03 补充 SQL的子查询(where,from),子查询作为集合来比较some,exists,all(某一个,存在,所有)

子查询&#xff1a; where字句的子查询&#xff1a; 通常用in关键字&#xff1a; 举个例子&#xff1a; in关键字&#xff1a; not in 关键字&#xff1a; in 也可以用于枚举集合&#xff1a; where中可以用子查询来作为集合来筛选元祖。 some&#xff0c;all的运算符号…

一个程序,实现随机随机数据生成自由

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 发现又是好久没有和大家见面了&#xff0c;先给大家分享一下最近的研究方向和成果&#xff1a; 最近接到的…

Shell三剑客:sed(简介)

一、前言 Stream EDitor:流编辑 sed 是一种在线的、非交互式的编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”(pattern space)&#xff0c;接着用sed命令处理缓冲区中的内容&#xff0c;处理完成后&…

【Spark精讲】Spark五种JOIN策略

目录 三种通用JOIN策略原理 Hash Join 散列连接 原理详解 Sort Merge Join 排序合并连接 Nested Loop 嵌套循环连接 影响JOIN操作的因素 数据集的大小 JOIN的条件 JOIN的类型 Spark中JOIN执行的5种策略 Shuffle Hash Join Broadcast Hash Join Sort Merge Join C…

Echarts 热力图与折线图的结合

热力图与折线图结合使用(文末含源码) 这种需求并不多见&#xff0c;遇到后第一时间翻看了Echars官方文档&#xff0c;并没有发现类似的例子。于是自己动手合并了双轴&#xff0c;后发现折线图会被遮盖。经过排查发现了一个关键参数&#xff1a;visualMap的配置。这个配置在热力…

Go delve调试工具的简单应用

Delve是个啥 Delve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you’re using a debugger, things aren’t go…

前端基础——鼠标事件对象属性和方法

button:0(未按下)1(左键)2(右键)4(中键) clientX/clientY(表示事件在客户端区域的水平和垂直坐标,左上为原点) ctrlKey表示鼠标事件发生时是否按下了ctrl键 MouseEvent.offsetX和MouseEvent.offsetY表示鼠标相对于目标节点内部填充区域的偏移量 MouseEvent.screenX和MouseE…

四十四、Redis的数据持久化(RDB、AOF)

目录 一、定义 二、RDB 1、默认方案&#xff1a; 2、bgsave方案&#xff1a; 3、bgsave的基本流程&#xff1a; 4、RDB会在什么时候执行&#xff1f;save 60 1000代表什么含义&#xff1f; 5、RDB的缺点&#xff1a; 三、AOF 1、定义&#xff1a; 2、流程&#xff1a;…

二叉树遍历

今天讲的不是 leetcode 上的题&#xff0c;但也和二叉树有关&#xff0c;一道比较有意思的题 牛客网上的题&#xff0c;如果看懂了&#xff0c;也可以来试着做一下&#xff1a; 二叉树遍历_牛客题霸_牛客网 (nowcoder.com) 题目 编一个程序&#xff0c;读入用户输入的一串先…

无mac在线申请hbuilderx打包ios证书的方法

hbuilderx是一个跨平台的开发工具&#xff0c;可以开发android和ios的app应用。打包hbuilderx应用需要hbuilderx打包证书。但是很多使用hbuilderx开发的程序员&#xff0c;并没有mac电脑&#xff0c;而申请ios的证书&#xff0c;hbuilderx官网的教程却是需要mac电脑的&#xff…

C语言—每日选择题—Day49

第一题 3. 假定有语句“ int b[10], *pb; ”&#xff0c;则不正确的赋值为 &#xff08; &#xff09; A&#xff1a;pbb B&#xff1a;pbb[5] C&#xff1a;pbb2 D&#xff1a;pb&b[0] 答案及解析 B 本题考查的是指针类型对数组的引用&#xff1b; A&#xff1a;b是数组名…

Win11如何找到电脑中的NVIDIA控制面板

目录 桌面任意地方右击&#xff0c;选择

SpringBoot里面的web与webflux尽量不在一个模块里面使用

可以参看&#xff1a; java - Dont spring-boot-starter-web and spring-boot-starter-webflux work together? - Stack Overflow The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWe…

统一大语言模型和知识图谱:如何解决医学大模型-问诊不充分、检查不准确、诊断不完整、治疗方案不全面?

统一大语言模型和知识图谱&#xff1a;如何解决医学大模型问诊不充分、检查不准确、诊断不完整、治疗方案不全面&#xff1f; 医学大模型问题如何使用知识图谱加强和补足专业能力&#xff1f;大模型结构大模型嵌入知识图谱的方法 医学大模型问题 问诊。偏离主诉和没抓住核心。…

第1章:企业级研发测试流程

通过实际&#xff08;自研互联网&#xff09;企业的研发流程一览图。 我们发现分为9个阶段&#xff0c;当然每个公司细节并不一样。 所以我希望你能理解这句话&#xff1a; 一切的流程、行为、结果都是围绕“产品质量”这4个字开展活动。而作为测试&#xff0c;你该考虑的是如何…

克隆虚拟环境

conda虚拟环境 克隆clone 在服务器上想要使用别人搭好的环境&#xff0c;但是又怕自己对环境的修改更新会影响他人的使用&#xff0c;这个时候可以使用conda命令进行复制环境。 首先假设已经安装了Anaconda。 根据已有环境名复制生成新的环境 1、假设已有环境名为A&#xff0c…

JWT实现websocket的token登录拦截认证

关于websocket的请求必须登录&#xff0c;实现websocket需要登录后才可使用&#xff0c;不登录不能建立连接。 后台spring security配置添加websocket的请求可以匿名访问&#xff0c;关于websocket的请求不要认证就可以随意访问&#xff0c;去除匿名访问后&#xff0c;前端在与…