自动化测试selenium(一)

2023/11/30 8:46:32

文章目录

  • 一、自动化测试初识
    • 1.什么是自动化测试?
    • 2.Selenium初识
    • 3.什么是驱动
  • 二、Selenium基础语法
    • 1.一个简单的自动化脚本分析
    • 2. 元素的定位
      • 2.1.css选择器
      • 2.2.Xpath选择器
      • 2.3.id 和name 定位
    • 3. 元素的操作
      • 3.1.点击与提交
      • 3.2.模拟按键输入send_keys
      • 3.3.清空clear()
      • 3.4.获取文本 getText()
    • 4.等待
  • 三、最后的话

一、自动化测试初识

1.什么是自动化测试?

自动化测试指的是软件测试的自动化,在预设状态下运行应用程序或系统,预设的条件包括正常和异常条件,最后评估结果。将人为驱动的测试行为转化为机器执行的过程。

实际上,我们的自动化测试只能代替一部分的手工测试。因为随着软件功能的增加,版本越来越多,版本回归的压力也越来越大,所以仅仅通过人工测试来回归所有的的版本肯定是不现实的,因此我们需要借助自动化来进行回归测试。

因此说,我们的自动化测试是一个提高测试效率的工具。

2.Selenium初识

selenium是一个web的自动化测试工具,具有以下优点:

  • 开源免费
  • 支持多浏览器,如chrome,Firefox,IE,edge…
  • 支持多系统,如Linux、Windows、MacOS…
  • 支持多语言,如Java、python…
  • selenium底层有很多可使用的API

3.什么是驱动

简单来说驱动就是使某个东西运行起来的东西或操作,汽车的驱动让汽车动起来,计算机里面的驱动可以让计算机和设备工作起来。

同理,我们打开浏览器也需要驱动,在人工测试的情况下,我们是人工驱动去打开浏览器,但在自动化的情况下,我们通过代码来驱动程序打开浏览器。

自动化测试selenium、 驱动、浏览器三者关系如下图:

在这里插入图片描述
代码发送请求——>驱动接受请求——>驱动解析请求


二、Selenium基础语法

1.一个简单的自动化脚本分析

    //一个简单的自动化示例
    public void dilireba_test() throws InterruptedException {
    //选择驱动的浏览器,这里用到的是Chrome
        ChromeDriver driver = new ChromeDriver();
        Thread.sleep(2000);
        //输入百度网址
        driver.get("https://www.baidu.com");
        Thread.sleep(2000);
        //找到百度输入框,并输入关键字
   //一个控件有若干属性id 、name、(也可以用其它方式定位),百度输入框的id 叫kw     driver.findElement(By.cssSelector("#kw")).sendKeys("努力学习");
        Thread.sleep(2000);
        //找到百度一下按钮,并点击
        
//搜索的按钮的id 叫su ,我需要点一下按钮( click() )        
		driver.findElement(By.cssSelector("#su")).click();
        Thread.sleep(2000);
        //释放掉驱动对象,关闭浏览器
        driver.quit();
    }

2. 元素的定位

跟送外卖一样,我们需要定位到顾客的地址,外卖员才能准确地将外卖送到顾客手中。 对象的定位是自动化测试的核心。要想操作一个对象,必须首先定位到这个对象。

定位的时候,需要保证属性的唯一性,这样才能准确定位

webdriver常用的定位方法有以下几种:

  1. css选择器
  2. 基础选择器
  3. id、选择器
  4. 复合选择器
  5. xpath选择器

2.1.css选择器

    public void location_Text() throws InterruptedException {
        //css选择器
        //通过css选择器定位到输入框,并且输入堂吉诃德
        driver.findElement(By.cssSelector("#kw")).sendKeys("堂吉诃德");
        //等待3s
        Thread.sleep(3000);
        //通过css选择器定位到百度一下按钮,并且进行点击操作
        driver.findElement(By.cssSelector("#su")).click();
        Thread.sleep(3000);
    }

在这里插入图片描述


2.2.Xpath选择器

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 ——百度百科

XPATH的获取可以用chrome的F12开发者模式中Element-右键-copy-copy xpath来获取
在这里插入图片描述

//xpath选择器定位
        driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("堂吉诃德");
        Thread.sleep(3000);
        driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
        Thread.sleep(3000);

注意,定位元素的属性一定要唯一,不然可能会出错


2.3.id 和name 定位

id 和name 是我们最最常用的定位方式,因为大多数控件都有这两个属性,而且在对控件的id 和name 命名时一般使其有意义也会取不同的名字。通过这两个属性使我们找一个页面上的属性变得相当容易。

//id定位
        driver.findElement(By.id("kw")).sendKeys("堂吉诃德");
        Thread.sleep(3000);
        driver.findElement(By.id("su")).click();
        Thread.sleep(3000);

元素的定位简单介绍以上几种。


3. 元素的操作

3.1.点击与提交

click和submit都可以操作按钮。可以click不一定可以submit但是页面的任何元素都可以click。selenium官方文档里不建议使用submit

在这里插入图片描述

3.2.模拟按键输入send_keys

在这里插入图片描述

3.3.清空clear()

在这里插入图片描述

3.4.获取文本 getText()

在这里插入图片描述
【注意】不是页面上可以看见的文字都能成为文本,有的文本是属性对应的属性值,不能够通过getText()来获取文本。

获取属性值:使用getAttribute (方法来获取属性值

在这里插入图片描述


4.等待

selenium中的等待有3类:强制等待、隐式等待、显式等待

(1)强制等待:让程序暂停一会,等待指定时间之后继续执行下一步。

在这里插入图片描述

优点:语法简单,适合调试的时候用。
缺点:需要等待固定的时间,造成测试时间的大量消耗。大大的减少了自动化的测试效率。

(2)隐式等待:在规定的时间范围内,轮询等待元素出现之后就立即结束,如果在规定的时间内元素仍然没有出现,则会抛出一个NoSuchElementException异常。

在这里插入图片描述

隐式等待作用在webdriver整个生命周期。只要没有走driver.quit即没有退出浏览器,隐式等待都是一直存在的。

优点:节省了大量的等待时间,元素展示之后就可以直接执行下一步,执行效率高。

缺点:需要等待所有的元素都展现才会执行下一步,仍然会有额外的时间上的浪费

(3)强制等待:强制等待可以针对某一个元素来进行测试。
在这里插入图片描述
在这里插入图片描述
优点:针对某一个元素来进行等待,极大降低了自动化整体的等待时间。

缺点:写法更为复杂。

强制等待可以使用selenium里的一个类,类里提供了很多方法可以用来测试。下面两个是比较常用的:

  1. presenceOfElementLocated:检查页面是否存在对应的元素
  2. textToBe:检查页面元素对应的文本信息是否正确

在这里插入图片描述


三、最后的话

好久没更博客,一方面是自己在准备秋招,一方面是因为在实习,时间匆匆忙忙,闲暇时间都用来放松了,前段时间真的是有点小累,现在开始慢慢调整过来,加油!


http://www.jnnr.cn/a/110772.html

相关文章

uniapp小程序实现上下固定中间滑动布局(附源码和实现过程讲解)

前言 上下固定,中间可以上下滑动是移动端中非常常见的布局,实现的过程在本篇记录一下 效果展示: 实现过程 在移动端中布局主要以flex布局为主,如果不太清楚可以去看看学习一下flex布局 要实现样式,我们先要学会分析…

文献阅读-图文匹配的相似性推理和过滤

Title:《Similarity Reasoning and Filtration for Image-Text Matching》 Published:2021AAAI code:https://github.com/Paranioar/SGRAF 这篇论文提出的模型SGRAF是当前跨模态检索SOTA,属于跨模态相似性度量方法一类。 Abstr…

并发编程的工具类

文章目录CountDownLatchCycleBarrierSemaphoreExampleCountDownLatch 底层是计数器实现的,多线程并发编程的工具类,一个线程或者多个线程等待多个线程,例如上课,等待老师来了之后才开始上课的操作 countdown():计数器…

C++多态(1)

目录1. 多态的概念2. 多态的定义和实现2.1 多态的构成条件2.1.1 重写2.2.2 指针或者引用2.2 虚函数重写的两个例外2.3 多态里的一个不规范的地方2.4 重载、重写(覆盖)、隐藏(重定义)的对比3. C11 override 和 final1. 多态的概念 …

Vue2.0开发之——Vue基础用法-初步使用(14)

一 概述 Vue的下载及安装Vue使用示例 二 Vue的下载及安装 2.1 Vue使用前提(Node) node --versionv18.8.0 2.2 Vue(2.7.10)下载 Vue下载地址:https://v2.cn.vuejs.org/v2/guide/installation.html 同理下载: dayjs.min.js:https://day…

【python】采集**本子,不要看了,快进来~

前言 大家早好、午好、晚好吖~ 相信不少小伙伴都知道这个网站,特别是中二期得时候 博主我就看过,哈哈哈哈 今天我的得目的就是这个,咋来采集一下它 目录标题前言代码展示效果展示尾语 💝代码展示 # 导入数据请求模块 --> 第…

spring5:Aop思想和注解Aop

一.Aop是什么? 1.Aop 面向切面编程Oop(面向对象编程) 2.举例说明 加入日志功能:记录输入输出即在核心功能头尾加入非核心功能举例:在核心功能处加入非核心功能 public class CalculatorLogImpl implements Calcul…

008 怎么取消隐藏文件扩展名

win7系统下,想打开“.html”文件,文件却常常以“.txt”(文本文档)的形式被打开,对此我们往往搜遍全网,却无法找到答案。 其实原理是这样的: [A] “文件.html.txt”(错误示范&#…

小程序开发当中的数据绑定和事件绑定

数据绑定 1.主要运用mastache数据绑定方法 mustache的运用场景 例如说要实现上述功能 那么就要用到页面文件当中的index.js,在文件当中有一个重要的配置项就是page({ data: })来配置数据等等的数据了 上代码&#xff1a; list/list.js <view>{{name}} </view>…

超级简单的机器学习入门

超级简单的机器学习入门 文章目录超级简单的机器学习入门0.写在前面1.机器学习基本概念2.机器学习算法的类型2.1 监督学习2.2 无监督学习2.3 监督学习和无监督学习的对比2.4 强化学习3.机器学习的三个基本要素3.1 模型3.2 学习准则3.2.1 损失函数3.2.2 欠拟合和过拟合&#xff…

算法竞赛入门【码蹄集进阶塔335题】(MT2321-2325)

算法竞赛入门【码蹄集进阶塔335题】(MT2321-2325&#xff09; 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2321-2325&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f;目录1. MT2321 最大的矩形面积2. MT2322 战神的对称谜题3. MT…

Netty架构设计

目录 Selector模型 SelectableChannel Channel注册到Selector SelectionKey 遍历SelectionKey 事件驱动 责任链模式 Selector模型 Java NIO是基于Selector模型来实现非阻塞IO&#xff0c;Netty底层基于Java NIO实现的&#xff0c;因此也使用了Selector模型。 Selector提…

现场直击 | 复旦MBA科创青干营开营

近日&#xff0c;复旦MBA首期科创青干营开营。复旦大学校长、中科院院士金力教授&#xff0c;复旦大学研究生院常务副院长陈焱教授&#xff0c;复旦大学管理学院院长陆雄文教授&#xff0c;科创青干营学术导师、企业家导师&#xff0c;与首期营员共同参加开营仪式。    为培…

【设计模式】以国足的例子来解释代理模式,希望自己不要被退钱

文章目录1 代理模式1.1 代理模式的解释1.2 代理模式的四个对象2 例子2.1 释义2.2 代码2.3 效果图3 静态代理模式3.1 解释3.2 代码3.3 效果图4 代理模式的优缺点4.1 代理模式的优点4.2 代理模式的缺点1 代理模式 1.1 代理模式的解释 通过引入一个新的对象来实现对真实对象的操作…

软件测试简历投递小技巧,百分百避免已读不回,成功入职增加30%

简历投递小技巧&#xff1a; 有不少小伙伴会有已读不回或者一直未读的情况&#xff0c;今天&#xff0c;分享一个投简历小技巧&#xff0c;关于投简历的时间&#xff1a; HR 一般会在上午 9 点半左右和下午 2 点打开招聘软件或者邮箱&#xff1b;在上午 11 点和下午 3 点左右…

磁盘算法——为了减少寻道时间

文章目录一次磁盘读/写操作需要的时间先来先服务(FCFS)最短寻找时间优先算法&#xff08;SSTF&#xff09;扫描算法&#xff08;SCAN&#xff09;循环扫描算法&#xff08;S-SCAN&#xff09;LOOK算法C-LOOK算法一次磁盘读/写操作需要的时间 寻道时间 在读写数据前&#xff0c;…

LaTeX入门学习9(tikz基础-01)

文章目录Tikz基础绘制 tikz 图像基础绘图指令基础绘图相关参数设置线型设置两条线风格设置填充路径设置填充模式(需要使用patterns库)Tikz基础 tikz是LaTeXLaTeXLaTeX的绘图包&#xff0c;其包含非常丰富的绘图操作&#xff0c;通过其可以绘制出非常精美的图像。正因如此&…

利用ARouter实现组件间通信,模块间相互调用问题

一&#xff1a;基本用法 添加依赖和配置&#xff0c;使用ARouter之前&#xff0c;需要先添加相应的依赖&#xff0c;依赖的脚步如下&#xff1a; android {defaultConfig {...javaCompileOptions {annotationProcessorOptions {arguments [AROUTER_MODULE_NAME: project.getN…

Scrapy框架介绍

文章目录Scrapy框架介绍1.简介2.架构3.数据流4.项目结构Scrapy框架介绍 Scrapy 是一个基于 Python 开发的爬虫框架&#xff0c;可以说它是当前Python爬虫生态中最流行的爬虫框架&#xff0c;该框架提供了非常多爬虫相关的基础组件&#xff0c;架构清晰&#xff0c;可扩展性极强…

luffy-(2)

内容概览 路飞后台配置之封装logger路飞后台配置之封装全局异常路飞后台配置之二次封装response路飞数据库配置User模块User表配置开放media访问路飞前台项目创建和配置 路飞后台配置之封装logger 每个项目&#xff0c;都需要记录日志 1. 后期可以通过日志排查问题&#xff0…
最新文章