UI自动化测试(下拉框(select类),多窗口,属性,类的方法实战)

news2024/12/25 11:23:29

一、下拉框(select类实现的)

在UI的自动化测试实战中,如果遇到下拉框的选择,我们可以使用Select类里面的方法来具体进行定位和解决。下面我们使用HTML的代码来写一个下拉框的页面交互,让大家从直观上知道下拉框的交互:

 如上是HTML的源代码,下面具体看看交互的信息,如下所示:

 

二、下拉框实战

1.select_by_index 索引的方式

select_by_index()的方法是通过索引的方式,如我们在上面的交互中,我们想选择下拉框中的Go语言,它是在第三位,那么它的索引就是2,因为索引是从0开始,下面的代码案例主要是以索引的方式来进行定位的,具体案例实战代码如下:

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index.html')
t.sleep(2)
nr=driver.find_element_by_id('nr')
#针对Select进行实例化
select=Select(webelement=nr)
#索引方式
select.select_by_index(2)
t.sleep(3)
driver.quit()

2.select_by_value

select_by_value()方法是通过value的方式来进行定位,也就是标签中option里面的value属性来进行定位,比如我们还是Go语言,那么它的value的值就是“Go”,实战代码如下:

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index.html')
t.sleep(2)
nr=driver.find_element_by_id('nr')
#针对Select进行实例化
select=Select(webelement=nr)
#value的方式
select.select_by_value('Go')
t.sleep(3)
driver.quit()

3.select_by_visible_text

select_by_text()的方法是通过文本信息来定位的,比如下拉框还是想选择Go,那么它的文本信息其实就

是“Go语言”,见这部分的案例实战代码:

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index.html')
t.sleep(2)
nr=driver.find_element_by_id('nr')
#针对Select进行实例化
select=Select(webelement=nr)
#文本的方式
select.select_by_visible_text('Go语言')
t.sleep(3)
driver.quit()

4.拉勾网下拉框实战

但是拉勾网比较特殊,比如我们想在拉勾网搜索测试开发工程师,并点击学历要求的下拉框,选择本科,但我们发现,它的源代码中本大专本科等这些并没有写在select中,这时我们可以使用xpath来进行定位,具体实现的代码如下:

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.lagou.com/')
t.sleep(3)
driver.find_element_by_id('search_input').send_keys('测试开发工程师')
t.sleep(3)
#点击搜索按钮
driver.find_element_by_id('search_button').click()
t.sleep(3)
#点击学历要求
driver.find_element_by_xpath('//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[2]/div/span').click()
t.sleep(3)
#选择本科
driver.find_element_by_xpath('//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[2]/div/div/ul[2]/li[2]/span').click()
t.sleep(3)
driver.quit()
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、多窗口实战

实现从当前页面切换到另外一个新的页面,那么这个时候就需要使用到多窗口的操作和实战。其实坦白说,多窗口更多值的是两个窗口,如果是2个以上的窗口,是很难判断的,因为缺少判断的基准.

多窗口的解决步骤可以具体的描述为:

  • 先获取当前窗口句柄
  • 然后点击链接,打开一个新的窗口句柄
  • 然后获取到所有的窗口句柄
  • 循环所有的窗口句柄,判断如果不是当前窗口句柄,那么就切换到新的窗口句柄(如果当前的,就只能是新的窗口了)
  • 切换到新的窗口后,进行操作完成后,然后关闭新的窗口,再切换到当前窗口句柄

比如我们在百度首页,又打开了hao123页面,这时我们打开了两个窗口,我们想要对他们分别进行操作,用如下代码实现:

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
#首先打开百度
driver.get('http://www.baidu.com/')
#获取当前窗口(百度)
nowHandle=driver.current_window_handle
t.sleep(3)
#打开hao123的窗口
driver.find_element_by_partial_link_text('hao').click()
t.sleep(3)
#获取所有的窗口 (百度和hao123)
allHandles=driver.window_handles
t.sleep(3)
for item in allHandles:  #循环所有的窗口,我们把它赋item
    if item!=nowHandle:  #如果item不是百度的页面,就是hao123
        driver.switch_to.window(item) #切换到hao123
        t.sleep(3)
        driver.find_element_by_xpath('//*[@id="search"]/form/div[2]/input').send_keys('hao123')
        t.sleep(3)
        driver.close()
driver.switch_to.window(nowHandle) #切换到百度页面
t.sleep(3)
driver.find_element_by_id('kw').send_keys('百度')
t.sleep(3)
driver.quit()

四、webdriver浏览器属性

在WebDriver的测试框架中,WebDriver的类里面提供了很多的方法来专门针对浏览器的操作,这些方法都是在WebDriver的类里面,如测试被测试的浏览器地址,获取被测试的浏览器名称。下面针对这部分结合具体的案例实战来说明这些的案例应用实战。

1.获取测试的地址

from selenium import webdriver
driver=webdriver.Chrome()
'''获取测试的地址'''
driver.get('http://www.baidu.com')
driver.find_element_by_partial_link_text('hao').click()
#断言
assert driver.current_url.endswith('hao123.com/')==True #断言测试的地址是不是以'hao123.com/'结尾如果是返回True 如果不是返回False
driver.close()

2.获取当前页面代码

from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print('获取网页的源代码: ',driver.page_source)
driver.quit()

3.获取当前的Title

获取浏览器的title其实很简单的,比如百度的title它就是“百度一下,你就知道”,那么下面针对这部分进行具体的验证

from selenium import webdriver
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
assert driver.title=='百度一下,你就知道'
driver.close()

4.前进和后退

from selenium import webdriver
driver=webdriver.Chrome()
driver.maximize_window()
'''前进和后退'''
import time as t
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
t.sleep(3)
driver.get('http://www.bing.com')
t.sleep(3)
#后退
driver.back()
print('地址为:',driver.current_url)
t.sleep(3)
#前进
driver.forward()
print('地址为:',driver.current_url)
t.sleep(3)

5.刷新页面

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.find_element_by_id('sb_form_q').send_keys('python')
t.sleep(3)
driver.refresh()
t.sleep(3)
driver.close()

五、类的方法实战

在UI自动化测试中,WebElement的类里面提供了很多的方法可以进行调用,比如进行具体的清空的操作,和

获取一个文本输入框里面输入的关键字的信息。下面详细的演示下这部分的具体应用和案例实战。

1.clear()清空

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
so=driver.find_element_by_id('kw')
so.send_keys('asdfgh')
t.sleep(3)
#清空文本框内输入的信息
so.clear()
t.sleep(3)
driver.quit()

2.get_attribute():获取元素属性的值

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.lagou.com')
t.sleep(3)
driver.find_element_by_link_text('登录').click()
t.sleep(3)
login=driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div/div[2]/div[3]/div[1]/div/div[2]/form/div[1]/div/input')
print(login.get_attribute('placeholder'))
t.sleep(3)
driver.quit()

3.所有的input里面输入的值,都是在value的属性

 from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com/')
so=driver.find_element_by_id('kw')
so.send_keys('admin')
print(so.get_attribute('value'))
driver.quit()

4.is_displayed()是否可见

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com/')
aboutBaidu=driver.find_element_by_link_text('关于百度')
print(aboutBaidu.is_displayed())
driver.quit()

5.is_enabled():是否可编辑

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com/')
so=driver.find_element_by_id('kw')
#is_enabled():是否可编辑
print(so.is_enabled())
driver.quit()

6.is_selected()针对单选按钮是否勾选

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/#')
autoLogin=driver.find_element_by_id('store1')
t.sleep(3)
print('是否勾选:',autoLogin.is_selected())#默认勾选,所以为真
t.sleep(3)
autoLogin.click() #取消勾选自动登录
t.sleep(3)
print('是否勾选:',autoLogin.is_selected())
driver.quit()

下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

资料获取方式 :

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

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

相关文章

Node工程的依赖包管理方式

在前端工程化中,JavaScript 依赖包管理是非常重要的一环。依赖包通常是项目所依赖的第三方库、工具和框架等资源,它们能够帮助我们减少重复开发、提高效率并且确保项目可以正确的运行。 目前比较常见的前端包管理器有 npm 和 Yarn,npm 是 No…

16.3.2 【Linux】程序的管理

程序之间是可以互相控制的。举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个程序, 你既然可以让她关闭或启动,当然就是可以控制该程序。 使用kill-l或者是man 7 signal可以查询到有多少个signal。主要的讯号代号与名…

Stable Diffusion 告别复制关键词,高质量提示词自动生成插件

在使用SD时,我们经常会遇到心中无想法,或不知如何描述心中所想的图像。有时由于提示词的选择不当,生成的图片质量也不尽如人意。为此,我今天为大家推荐一个高质量的提示词自动生成插件——One Button Prompt。 下面是他生成的一些样图。 文章目录 插件安装插件说明主菜单工…

【Linux】可重入函数 volatile关键字 以及SIGCHLD信号

可重入函数 volatile关键字 以及SIGCHLD信号 一、可重入函数1、引入2、可重入函数的判断 二、volatile关键字1、引入2、关于编译器的优化的简单讨论 三、SIGCHLD信号 一、可重入函数 1、引入 我们来先看一个例子来帮助我们理解什么是可重入函数: 假设我们现在要对…

基于Yolov5与LabelMe训练自己数据的图像分割完整流程

基于Yolov5与LabelMe训练自己数据的实例分割完整流程 1. Yolov5配置2. 创建labelme虚拟环境4. 接下来开始使用labelme绘制分割数据集4.1 json to txt4.2 划分数据集(可分可不分) 5. 训练 1. Yolov5配置 参照这边文章: https://blog.csdn.net/ruotianxia/article/de…

Python3,lmproof库,你不知道的小技能,这一篇给安排。

lmproof技能介绍 1、引言2、代码实战2.1 定义2.2 常用语法2.3 安装2.4 示例 3、总结 1、引言 小屌丝:鱼哥,鱼哥,我要考考你 小鱼:你要考考我? 小屌丝:是的啊, 我要考你, 小鱼&#…

ZooKeeper的应用场景(数据发布订阅、负载均衡)

ZooKeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布与订阅。另一方面,通过对ZooKeeper中丰富的数据节点类型进行交叉使用,配合Watcher事件通知机制,可以非常方便地构建一系…

DaVinci Resolve Studio 18 for Mac 达芬奇调色

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件,适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能,包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点: - 提供了全面的视…

【AGC】发布后应用信息支持设备不能删除问题

【关键字】 AGC、应用发布、兼容设备类型 【问题描述】 有开发者反馈发布新版本应用,应用信息可支持设备不能删除原有在架应用已选择的设备类型。发布应用问题,目前应用是面向车机开发的,在上一个开放性测试版本中,支持设备除了…

【vue】简洁优雅的火花线、趋势线

来由 在github发现个好看易用的vue趋势线组件,特此记录。 效果 趋势图生成后效果如上,线条为渐变色,可设置是否平滑。具体线条走势,根据数据动态生成。 使用 安装 npm i vuetrend -S 引入 import Vue from "vue"…

[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101

具体内容如下 PL/SQL Developer 处 登录时 终端处 登录时 ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Process ID: 0 Session ID: 0 Serial number: 0 解决方法是执行以下命令 sqlplus /nolog conn / as sysdba startup …

linux目录文件系统:磁盘分区情况

查看系统中的磁盘分区情况 使用命令: fdisk -l由上图可知,一共有4个磁盘分区: 分区1 : /dev/sdb分区2 : /dev/sda分区3: /dev/mapper/centos-root分区4: /dev/mapper/centos-swap查看有哪些目录/文件挂载在上面…

使用 Ploomber、Arima、Python 和 Slurm 进行时间序列预测

推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 简短的笔记本说明 笔记本由 8 个任务组成,如下图所示。它包括建模的大多数基本步骤 - 获取数据清理、拟合、超参数调优、验证和可视化。作为捷径,我拿起笔记本并使用Soorgeon工具…

ES 概念

es 概念 Elasticsearch是分布式实时搜索、实时分析、实时存储引擎,简称(ES)成立于2012年,是一家来自荷兰的、开源的大数据搜索、分析服务提供商,为企业提供实时搜索、数据分析服务,支持PB级的大数据。 -- …

ssm社区文化宣传网站源码和论文

ssm社区文化宣传网站源码和论文019 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 研究或设计的目的和意义: (一)研究目的: 通过本次课题能够将所学的Java编程知识以及Mysql数据库知…

msvcp140.dll如何重新安装?快速安装msvcp140.dll的方法分享

msvcp140.dll是Windows操作系统的一个动态链接库文件,它是Microsoft Visual C Redistributable的一部分。这个文件在运行某些应用程序时非常重要。然而,在某些情况下,msvcp140.dll文件可能会损坏或遗失,导致应用程序无法正常运行。…

甲基化系列 4. 基于芯片甲基化数据寻找简单的CpG甲基化标志物 (CimpleG)

甲基化系列分析教程 桓峰基因公众号推出甲基化系列分析教程,整理如下: 甲基化系列 1. 甲基化之前世今生(Methylation) 甲基化系列 2. 甲基化芯片数据介绍与下载(GEO) 甲基化系列 3. 甲基化芯片数据分析完整…

见证马斯克的钞能力,AI.com再次易主,OpenAI投掷1100万美金购买AI.com刚满五个月

我们又一次见证了马斯克的钞能力。上次是去年他用440亿美元买下推特。 高价值的AI.com域名在2021年易主后,闲置过一段时间,今年2月份突然重定向到ChatGPT。 对于ChatGPT用户来说,每次访问都要在浏览器里敲这些字符:https://chat.o…

Java继承详解

目录 继承 为什么需要继承 继承的概念 继承的语法 父类成员的访问 子类中访问父类的成员变量 1.子类和父类不存在同名的成员变量 2.子类和父类成员变量同名 子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 super关键字 子类构造方法 super和thi…

【Redis】Redis三种集群模式-主从、哨兵、集群各自架构的优点和缺点对比

文章目录 前言1. 单机模式2. 主从架构3. 哨兵4. 集群模式总结 前言 如果Redis的读写请求量很大,那么单个实例很有可能承担不了这么大的请求量,如何提高Redis的性能呢?你也许已经想到了,可以部署多个副本节点,业务采用…