简单入门seleniumUI自动化测试

目录

一、selenium的介绍

二、selenium的原理

三、selenium的八种元素定位的方法

1、ID定位:

2 、name定位:

3、class定位:

4、tag定位:

7、css定位:

8、Xpath定位

四、selenium的常用元素操作

五、实例

资料获取方法


一、selenium的介绍

Selenium是一个流行的自动化测试工具,用于测试Web应用程序的功能和用户界面。它可以模拟用户在浏览器中的操作,如点击、输入文本、选择下拉框等,以及验证页面元素的状态和属性。Selenium可以帮助测试人员自动执行重复的测试任务,提高测试效率并减少人工错误。

二、selenium的原理

image.png

在我们的自动化程序中,我们需要导入selenium库中的WebDriver类来创建一个WebDriver对象,通过调用selenium客户端库相应的函数发送请求给浏览器驱动(如ChromeDriver)。

当我们使用WebDriver驱动程序执行代码时,WebDriver会将我们的指令转化为HTTP请求,并将其发送给浏览器驱动程序。

浏览器驱动是连接Selenium库和浏览器的桥梁,它负责与浏览器进行通信,并执行我们编写的代码来控制和操作浏览器。

浏览器驱动程序接收到这些HTTP请求后,会将其转化为浏览器可执行的指令,并将指令发送给浏览器进行执行。执行完成后,浏览器将结果返回给浏览器驱动程序,再由浏览器驱动程序将结果转化为HTTP响应,并将其返回给我们的代码程序。

三、selenium的八种元素定位的方法

selenium实现UI自动化的关键就在于元素定位,可谓,只要定位了元素就能够调用方法对UI元素进行操控。在介绍元素定位的方法前,我们需要先知道我们定位的代码写得对不对,此时F12的强大之处就体现出来了!

可以把开发者工具调出来,选择Elements,随便点击一个元素,然后点击Ctrl+F,在此搜索框可以搜索到当前页面的所有元素,再把我们定位元素的代码复制进行搜索,若搜索结果能定位到元素,则证明定位元素的方法写对了。

 在selenium中,有八种元素定位的方法,下面将进行介绍。

1、ID定位:

find_element(By.ID, 'Id属性值')

举例:

image.png

id属性值为kw,则代码为find_element(By.ID, 'kw')

在 CSS 中,id是用于标识网页元素的一种重要属性并且id是唯一的,因此,若定位的元素存在id值的话,通过ID定位是一个非常便捷的方式。

2 、name定位:

find_element(By.NAME,'name属性值')

举例:

 name属性值为referrer,则代码为find_element(By.NAME,'referrer)

3、class定位:

find_element(By.CLASS_NAME,'class属性值')

举例:

class属性值为foot-async-script,则代码为find_element(By.CLASS_NAME,'foot-async-script')

当class属性值有多个时,可以指定任意一个class 属性值,都可以选择到这个元素

4、tag定位:

find_element(By.TAG_NAME,'元素的标签值')

举例:

标签值为style,则代码为find_element(By.TAG_NAME,'style')

因为定位到的元素不唯一,所以我们可以使用find_elements(By.TAG_NAME,'style') ,注意find_element和find_elements的区别,find_elements返回的是一个列表

find_element(By.LINK_TEXT,'超链接文字')

举例:

如百度首页的视频则为超链接文字,代码可写为find_element(By.LINK_TEXT, '视频')

find_element(By.PARTIAL_LINK_TEXT,'超链接部分文字')

举例,

如超链接文字太长,也可以只输入部分,也能定位到元素, 如图上的“百度一下,你就知道-移动首页”属性值可写为:移动首页,代码:find_element(By.PARTIAL_LINK_TEXT, '移动首页')即可定位到元素

7、css定位:

find_element(By.CSS_SELECTOR,'css值')

更多的时候,元素是没有id、class值的,或者属性值不唯一,此时我们可以用CSS selector语法来选择元素,CSS选择器是Web开发中常用的一种定位元素的方法,可以在HTML文档中快速准确地找到所需的元素。

(1)通过标签名tag选择元素

例如 div, p, a等标签,例如,找出所有标签名为div的元素

find_elements(By.CSS_SELECTOR, 'div')

(2)通过类名class选择元素

语法为在class值前加一个.号,

举例:

代码为:find_element(By.CSS_SELECTOR, '.foot-async-script')

(3)通过ID选择元素

语法为在id值前加一个#号,

举例:

代码为:find_element(By.CSS_SELECTOR, '#result_tts_player')

(4)通过属性来选择元素

语法为[属性名=属性值]

举例:

代码为:find_element(By.CSS_SELECTOR, '[name=theme-color]') 也可以与标签名、id值或者类名组合使用 如find_element(By.CSS_SELECTOR, 'meta[name=theme-color]')

(5)通过子元素来选择

语法:元素1 > 元素2

若元素2在元素里面,如:

类属性wgt-navbar是类属性navbar-wrapper层级下的,则可以通过子元素语法来更准确的定位元素,代码为:find_element(By.CSS_SELECTOR, '.navbar-wrapper > .wgt-navbar)

(6)通过后代元素来选择

语法:元素1 元素2

与子元素一样,后代元素也是在元素里面;不同的是,子元素只能是元素的直接子元素,而后代元素可以不是直接子元素,子元素一定是后代元素,后代元素不一定是子元素

比如元素a > 元素b > 元素c > 元素d,元素b是元素a的子元素,元素c是元素b的子元素但不是a的子元素,元素c是元素a的后代元素。

举例:

类属性navbar-bg是类属性wgt-navbar层级下的,而wgt-navbar是navbar-wrapper的子元素,则navbar-bg是navbar-wrapper的后代元素。 则可以通过后代元素语法来更准确的定位元素,代码为:find_element(By.CSS_SELECTOR, '.navbar-wrapper .navbar-bg)

8、Xpath定位

XPath定位的优点是灵活且功能强大,可以根据元素的属性、标签名、层级关系、文本内容等多个特征进行定位。在某些情况下,XPath定位可能更适合定位复杂的元素结构或特殊的元素。然而,XPath表达式相对于CSS选择器来说更复杂一些,有时可能会更加冗长。因此,在实际使用中,可以根据具体的情况选择使用CSS选择器还是XPath定位来定位元素。

XPath定位方式可以分为绝对路径和相对路径两种方式。

(1)绝对路径定位:

绝对路径是从根节点开始,通过一系列的节点路径来定位元素。绝对路径以斜杠 / 开头,表示根节点,然后按照节点层级关系逐级定位。例如,/html/body/div[1]/input 表示从根节点开始,先选择html元素,然后选择body元素,再选择第一个div元素,最后选择其中的input元素。

(2)相对路径定位:

相对路径是相对于当前节点的路径,更常用且灵活。相对路径以双斜杠 // 开头,表示从当前节点的任意位置开始,选择符合条件的元素。例如,//input 表示选择文档中所有的input元素,不论其在文档中的位置。下面介绍下如何根据元素的属性、标签名、层级关系、文本内容等特征进行定位。

//tagname: 选择所有具有指定标签名的元素

//tagname[@attribute='value']: 选择具有指定属性和属性值的元素。

//* [@attribute='value']: 选择具有指定属性和属性值的任意元素

//parent/child: 选择父元素下的直接子元素。

//ancestor/descendant: 选择ancestor元素下的所有descendant元素。

//* [text()='value']: 选择具有指定文本内容的任意元素。

XPath定位方式也支持使用逻辑运算符和多个条件进行定位。例如,可以使用 and、or、not 来组合多个条件。

四、selenium的常用元素操作

click(): 单击元素。

send_keys(value): 向输入框元素发送文本。

clear(): 清空输入框元素的文本。

get_attribute(name): 获取元素的指定属性值。

is_displayed(): 判断元素是否可见。

is_enabled(): 判断元素是否可用。

is_selected(): 判断元素是否被选中。

五、实例

需求: 从百度搜索进入微博,然后获取微博热搜数据并输出到txt文档中

import time
from selenium import webdriver
from selenium.webdriver.common.by import Byclass test(object):def __init__(self):self.driver = webdriver.Chrome()self.driver.get('https://www.baidu.com/')#self.driver.get('https://weibo.com/')self.driver.implicitly_wait(10)      #`全局等待` 该方法接受一个参数, 用来指定最大等待时长self.driver.maximize_window()        #最大化浏览器页面def baidu_search(self):self.driver.find_element(By.ID,'kw').send_keys('微博')   #通过id值定位self.driver.find_element(By.CSS_SELECTOR,"[value=百度一下]").click() #通过CSS选择器定位self.driver.find_element(By.PARTIAL_LINK_TEXT,'微博-随时随地发现新鲜事').click()  #通过超链接定位for handle in self.driver.window_handles:   #不断切换窗口至我们想要的窗口:Sina# 先切换到该窗口self.driver.switch_to.window(handle)  # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口if 'Sina' in self.driver.title:# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,breakdef get_weibo_hot_search(self):time.sleep(10)hot_search_list = self.driver.find_elements(By.XPATH, '//*[@class="wbpro-textcut f14 cla"]')print(len(hot_search_list))print(hot_search_list)for list in hot_search_list:hot_search_text=list.textself.save_data(hot_search_text)def save_data(self, hot_search_text):with open(r'C:\Users\User\Desktop\output.txt', 'a', encoding='utf-8', newline='') as f:  # 用追加的方式将数据保存到txt文件中# for number,hot_search_text in hot_search.items():f.write(hot_search_text+'\n')def main(self):self.baidu_search()self.get_weibo_hot_search()self.driver.quit()if __name__ == '__main__':ceshi = test()		# 实例化对象ceshi.main()		# 调用类函数入口

资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

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

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

相关文章

航顺HK32F030M怎么样 航顺HK32F030M应用领域介绍

航顺HK32F030M是一款基于ARM Cortex-M0内核的32位微控制器,具有高性能、低功耗、经济适用等特点。以下是颖特新关于航顺HK32F030M的详细介绍: 一、性能表现 航顺HK32F030M采用ARM Cortex-M0内核,主频最高可达64MHz,具有出色的计算…

反编译微信小程序,可导出uniapp或taro项目

微信小程序反编译(全网通用) 微信小程序反编译 反编译主要分为四个阶段 操作流程 1. node.js安装 2. node安装模块 3. 开始反编译 4. 导入到微信开发者工具既可运行 微信小程序反编译 当碰到不会写的小程序功能时,正好看到隔壁小程序有类似…

FPGA应用学习笔记--时钟域的控制 亚稳态的解决

时钟域就是同一个时钟的区域,体现在laways语句边缘触发语句中,设计规模增大就会导致时钟不同步,有时差,就要设计多时钟域。 会经过与门的延时产生的新时钟域,这种其实不推荐使用,但在ascl里面很常见 在处理…

2023国赛数学建模C题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

SpringCloud实用篇5——elasticsearch基础

目录 1.初识elasticsearch1.1 了解ES1.1.1 elasticsearch的作用1.1.2 ELK技术栈1.1.3 elasticsearch和lucene1.1.4 总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3 es的一些概念1.3.1 文档和字段1.3.2 索引和映射1.3.3 mysql与elasticsearch 1.4 部署单点…

单模光纤模场强度分布以及高斯近似的MATLAB仿真

已知纤芯半径5um,数值孔径NA 0.1,波长 用波长和数值孔径计算归一化常数V 之前我们在单模光纤特征方程及其MATLAB数值求解中,用线性关系拟合过V和W,这里直接用拟合结果 U用V和W计算 clc clear close alla 5e-6;%纤芯半径 NA …

Stable Diffusion + AnimateDiff运用

1.安装AnimateDiff,重启webui 2.下载对应的模型,最好到c站下载,google colab的资源有可能会出现下载问题 https://civitai.com/models/108836 3.下载完成后,你可以随便抽卡了。 抽卡完成后固定seed,然后打开这个插件&…

基于深度信念网络的西储大学轴承故障分类识别,基于EMD+DBN的西储大学轴承故障识别,LCD+DBN,LMD+DBN

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) (EMD,LCD,LMD)+DBN的深度信念网络的西储大学轴承故障分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类…

C数据结构与算法——常见排序算法时间复杂度比较 应用

实验任务 (1) 掌握常见比较排序算法的实现; (2) 掌握常用比较排序算法的性能及其适用场合。 实验内容 (1) 平均时间复杂度O(n2)和O(nlog2n)的算法至少各选两种实现; (2) 待排序的无重复关键字存放在一维整型数组中,数量为60000个&#xff…

springboot使用configtree读取树形文件目录中的配置

文章目录 一、介绍二、演示环境三、项目演示1. 配置文件2. 导入配置3. 检测配置属性 四、应用场景五、源码解析1. ConfigTreeConfigDataLocationResolver2. ConfigTreeConfigDataLoader 六、总结 一、介绍 相信绝大多数使用springboot开发项目的朋友们在添加配置时&#xff0c…

同步_异步请求和Ajax并利用axios框架简化

目录 同步和异步 原生的Ajax 创建XMLHttpRequest对象 常用方法 常用属性 axios框架 同步和异步 同步请求:发送请求后,会做出回应,回应的内容会覆盖浏览器中的内容,这样会打断其他正常的操作,显得不太友好&#…

汉诺塔:传说中的智慧游戏

文章目录 前言规则概述数学原理核心Java代码实现结语 前言 汉诺塔(Hanoi Tower),又称汉诺塔游戏,是源自印度古老传说的经典智力游戏。这个谜题的起源被认为与印度的寺庙有关,是由僧侣们传承的智慧游戏。汉诺塔塔座包含…

点击base64编码过的图片在另一个页面显示

开始的代码是这样的,新开一个窗口显示经过base64编码后的图片,但是url太长了显示失败。 openImage(imgSrc) {window.open(imgSrc, _blank); }, 解决方法:这段代码接收一个Base64编码的图像数据,把它转换为一个Blob对象。 Blob&…

LabVIEW使用边缘检测技术实现彩色图像隐写术

LabVIEW使用边缘检测技术实现彩色图像隐写术 隐写术是隐藏信息的做法,以隐瞒通信的存在而闻名。该技术涉及在适当的载体(如图像,音频或视频)中插入秘密消息。在这些载体中,数字图像因其在互联网上的广泛使用而受到青睐…

1+X Web前端开发职业技能等级证书建设方案

一 、系统概述 1X Web前端开发技术是计算机类专业重要的核心课程,课程所包含的教学内容多,实践性强,并且相关技术更新快。传统的课堂讲授模式以教师为中心,学生被动式接收,难以调动学生学习的积极性和主动性。混合式教…

5.0 Spring Boot核心

1. Spring Boot注解 注解名称 注解说明 SpringBootApplication 用于标注Spring Boot应用为启动类,是一个组合注解,主要组合了SpringBootConfiguration、EnableAutoConfiguration和ComponentScan注解 SpringBootConfiguration 继承自Configuration&a…

【apifox】如何写一份合格的 API 文档?

要想弄清楚如何开始写出一份合格的 API 文档,我们需要首先了解什么是 API,它的使用场景有哪些,应该具备什么样的能力。 什么是 API? 想象一下,当小 A 购入了一台新的电脑后,希望将显示画面投射至一块色准…

【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代下的Java"拯救者" 在云原生时代,其实Java程序是有很大的劣势的,以最流行的spring boot/spring cloud微服务框架为例,启动一个已经优化好,很多bean需要lazy load的application至少需要3-4秒时间,内…

构建之法 - 软件工程实践教学:每天都向前推进一点点

作者:福州⼤学 汪璟玢⽼师 汪老师:每次都向前推进一点点,哪怕只有一点点,也好过什么都不做。 ​邹老师:对,几个学期下来,就已经超过那些“空想”的团队很远了。坚持下去! 汪老师&…

vue或uniapp使用pdf.js预览

一、先下载稳定版的pdf.js,可以去官网下载 官网下载地址 或 pdf.js包下载(已配置好,无需修改) 二、下载好的pdf.js文件放在public下静态文件里, uniapp是放在 static下静态文件里 三、使用方式 1. vue项目 注意路径 :src"static/pd…