【自动化测试】---Selenium+Java

news2024/11/19 9:36:11

1.自动化测试分类

  • 接口自动化测试
  • UI自动化测试(移动端自动化测试、Web端自动化测试)

2.选择Selenium作为web自动化工具原因(面试题)

  • 开源免费
  • 支持多个浏览器
  • 支持多个系统
  • 支持多语言
  • Selenium包提供很多供测试使用的API

3.自动化是什么?为什么要做自动化? 

  • 自动化是测试人员为了提高效率或者保证测试质量,减少人力消耗,让代码辅助测试人员来执行测试的一个过程

 4.自动化脚本打开浏览器的工作原理

  •  编写的自动化脚本----创建http请求发送给浏览器驱动----浏览器驱动包含一个http server请求---操控浏览器----执行测试步骤
  • 驱动作用:驱动接收自动化脚本发送过来的http请求,并解析请求发送给浏览器,当浏览器执行完成后,会把结果返回给脚本

5. 使用Java编写Selenium编写的自动化脚本的步骤

  • 创建maven项目,在pom.xml里将依赖导入
<dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>
</dependencies>
  • 开始进行自动化脚本的编写
 public void dilireba(){

        //创建驱动对象
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver=new ChromeDriver(options);

        //访问网络
        driver.get("http://baidu.com");
        
        //查找元素并且操作元素
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        driver.findElement(By.cssSelector("#su")).click();

        //结束会话
        driver.quit();
    }

6.查找元素 

  • findElement()     查找当前的一个元素 ,返回值为WebElement
driver.findElement(By.cssSelector("#kw"))
  • findElenments()      查找当前相同多个元素, 返回值为List<WebElement>
List<WebElement> eles=driver.findElements(By.className("hotsearch-item"));

//打印每个名称
        for (WebElement els: eles ) {
            System.out.println(els.getText());
        }

7.元素定位 (自动化要求元素定位必须唯一)

  • 选择器:Selector ,选择页面指定元素
driver.findElement(By.cssSelector("#kw"))
  • Xpath
driver.findElement(By.xpath(//*[@id="kw"]))

 8.常见元素操作 

  • 输入文本 sendkeys,仅使用于文字字段
driver.findElement(By.cssSelector("#kw")).sendKeys("小嘉");
  • 点击 click
 driver.findElement(By.cssSelector("#su")).click();
  • 提交  submit,仅适用于表单元素
driver.findElement(By.cssSelector("#su")).submit();
  • 获取文本  getText(),打印这个属性的值
String ret=driver.findElement(By.className("title-content-title")).getText();
        System.out.println(ret);
  • 清除 clear ,测试是否可以频繁输入
driver.findElement(By.cssSelector("#su")).clear();
  • 获取标题 getTitle()
 System.out.println(driver.getTitle());
  • 获取url  geturl()
 System.out.println(driver.getCurrentUrl());
  •    获取属性的值  getAttribute()
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("value"));

9.窗口设置

  • 窗口最大化
//窗口最大化
  driver.manage().window().maximize();
       
  • 窗口最小化
 //窗口最小
        driver.manage().window().minimize();
      
  • 窗口全屏
  driver.manage().window().fullscreen();
      
  • 手动设置窗口大小

        //手动设置
        driver.manage().window().setSize(new Dimension(1024,4444));
  • 窗口切换(浏览器每次打开一个标签页,就会自动给每个标签页有一个标识,叫做句柄)10
 //输入网址
        driver.get("http://baidu.com");
        //点击更多标签页
        driver.findElement(By.cssSelector("#s-top-left > div > a")).click();
        //先获取所有标签的句柄
        Set<String>handles =driver.getWindowHandles();
        //获取当前页面句柄
        String curhandle=driver.getWindowHandle();
        System.out.println("当前页面句柄:"+curhandle);
        //获取所有的句柄
        for (String handle: handles) {
            if (handle!=curhandle){
                //进行页面切换
                driver.switchTo().window(handle);
            }
        }
        //查找更多页面的某个元素
        Thread.sleep(2000);
        driver.findElement(By.cssSelector("#content > div:nth-child(2) > div:nth-child(2) > a"));
        Thread.sleep(2000);
        driver.quit();

10.屏幕截图 

  • 在pom.xml里面导入依赖
<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
 </dependency>
  • 进行截图
public void test1() throws IOException {
        //启动驱动
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver=new ChromeDriver(options);
        //输入网址
        driver.get("http:baidu.com");
        //找到输入框去输入元素
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        //屏幕截图以文件形式
        File srcfile=driver.getScreenshotAs(OutputType.FILE);
        //把它放在指定路径
        String filename="my.png";
        FileUtils.copyFile(srcfile,new File(filename));
        driver.quit();
    }

11.等待 

  • 强制等待:Thread.sleep(时间)
  • 隐式等待:作用于driver的整个生命周期,会一直轮寻判断元素是否存在,如果不存在就等待设置好的时间里不断进行轮询,等到元素全被访问
public void test2(){
        //启动驱动
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver=new ChromeDriver(options);
        //开始隐式等待
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //输入网址
        driver.get("http:baidu.com");
        //找到输入框去输入元素
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        driver.quit();
    }
  • 显示等待: 针对代码一条去设置

new WebDriverWait(driver,Duration.ofSeconds(间)).until(driver.findElement(By.cssSelector("")));

12.浏览器导航 

         //后退回之前状态
        driver.navigate().back();
        //前进
        driver.navigate().forward();
        //刷新
        driver.navigate().refresh();

13.弹窗 

  • 将driver对象作用到弹窗上(切换弹窗) driver.switchTo.alert()
  • 确认--accept    取消---dismiss    输入文本----sendkeys
  • 警告弹窗--只有1个按钮     确认弹窗--可以选择确定和取消    提示弹窗--可以输入文本

14.选择框 (可以根据文本选择、根据属性值选择、根据文本选择)

void selectControll() throws InterruptedException {
//        driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/selenium4html/selenium-html/select.html");
//        Thread.sleep(3000);
//         WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));
//        //先创建选择框对象
//        Select select = new Select(ele);
//        Thread.sleep(3000);
//        //根据文本来选择
        select.selectByVisibleText("UPS Next Day Air ==> $12.51");
//        //根据属性值来选择
        select.selectByValue("12.51");
//        //根据序号来选择
//        select.selectByIndex(1);   序号从0开始
//        Thread.sleep(3000);
//        driver.quit();
//    }

15.执行脚本 executeScript(js代码)

void scriptControll() throws InterruptedException {
       driver.get("https://baidu.com/");
       Thread.sleep(3000);
       //执行js命令:让页面置顶/置底
       //如果想要滑到最小面,值设置的大一些就行         
       driver.executeScript("document.documentElement.scrollTop=500");
       Thread.sleep(3000);

        //0就是顶部
       driver.executeScript("document.documentElement.scrollTop=0");
       driver.get("https://www.baidu.com");
       Thread.sleep(3000);

       driver.executeScript("var texts = 
       document.querySelector('#kw');texts.value='1111'");
       Thread.sleep(3000);
       driver.quit();
   }

16.文件上传

void fileUploadControll() throws InterruptedException {      
 driver.get("url的路径");
Thread.sleep(3000);

driver.findElement(By.cssSelector("body > div > div > input[type=file]")).sendKeys("D:\\file\\比特教务\\测试\\selenium4html\\selenium-html\\upload.html");
//写入上传文件的文件夹路径和文件名
 Thread.sleep(3000);
 driver.quit();

17.浏览器参数的设置(需要在创建对象之前设置)

测试人员只会查看结果,不关注过程,所以需要设置无头模式(自动执行,我们在界面上看不到的),我们只可以在终端看见效果

      void paramsControll(){
        //百度搜索迪丽热巴
        //先创建选项对象,然后再设置浏览器参数
        ChromeOptions options = new ChromeOptions();
        options.addArguments("-headless");
        ChromeDriver driver = new ChromeDriver(options);
        driver.get("https://www.baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        driver.findElement(By.cssSelector("#su")).click();
        driver.quit();

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

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

相关文章

从零开始学Linux之gcc链接

目录 创建静态库并使用 创建动态库(共享库)并使用 链接&#xff1a;将.o目标文件链接起来生成一个可执行程序文件&#xff0c;可分为静态链接和动态链接 静态链接&#xff1a;链接器会找出程序所需的函数&#xff0c;然后将它们拷贝到执行文件&#xff0c;由于这种拷贝是完整…

echarts step line

https://ppchart.com/#/ <template><div class"c-box" ref"jsEchart"></div> </template><script> import * as $echarts from echarts // 事件处理函数 export default {props: {// 需要传递的数据data: {type: Array,defa…

单臂路由实验(思科)

一&#xff0c;实验目的 在路由器的一个接口上通过配置子接口的方式&#xff0c;实现相互隔离的不同vlan之间互通。 二&#xff0c;设备配置 Switch1 Switch>enable 全局模式 Switch#configure terminal 配置模式 Switch(config)#vlan 10 …

【文件上传WAF绕过】<?绕过、.htaccess木马、.php绕过

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

蓝桥杯-常用STL(二)

常用STL &#x1f388;1.集合&#x1f388;2.set的基础使用&#x1f52d;2.1引入库&#x1f52d;2.2插入元素&#x1f52d;2.3删除元素&#x1f52d;2.4判断元素是否存在&#x1f52d;2.5遍历元素&#x1f52d;2.6清空 &#x1f388;3.set与结构体 &#x1f388;1.集合 &#x…

Java把列表数据导出为PDF文件,同时加上PDF水印

一、实现效果 二、遇到的问题 实现导出PDF主体代码参考&#xff1a;Java纯代码实现导出PDF功能&#xff0c;下图是原作者实现的效果 导出报错Font STSong-Light with UniGB-UCS2-H is not recognized.。参考&#xff1a;itext 生成 PDF(五) 使用外部字体 网上都是说jar包的版本…

Java项目:基于SSM框架实现的西安旅游管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm811基于SSM框架实现的西安旅游管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

Vue学习笔记14 --自定义hook函数/toRef/provide/inject等

9.自定义hook函数 什么是hook&#xff1f;—— 本质是一个函数&#xff0c;把setup函数中使用的Composition API进行了封装。 类似于vue2.x中的mixin。 自定义hook的优势: 复用代码, 让setup中的逻辑更清楚易懂。 10.toRef 作用&#xff1a;创建一个 ref 对象&#xff0c;其…

T113-Pro的buildroot添加gdisk ( GPT disks )出现gptfdisk needs a toolchain w/ C++的解决方法

问题背景&#xff1a; 最近入手了百问网的全志T113-Pro&#xff0c;用Emmc启动发现一张32GB的SD卡在烧录了百问网镜像 100ask-t113-pro_sdcard.img 的系统后&#xff0c;仅有200多M的存储空间。第一时间上百问网论坛看是否有板友也出现类似情况&#xff0c;发现了一个帖子正是描…

Qt/C++音视频开发65-切换声卡/选择音频输出设备/播放到不同的声音设备/声卡下拉框

一、前言 近期收到一个用户需求&#xff0c;要求音视频组件能够切换声卡&#xff0c;首先要在vlc上实现&#xff0c;于是马不停蹄的研究起来&#xff0c;马上查阅对应vlc有没有自带的api接口&#xff0c;查看接口前&#xff0c;先打开vlc播放器&#xff0c;看下能不能切换&…

算法学习——华为机考题库1(HJ1 - HJ10)

算法学习——华为机考题库1&#xff08;HJ1 - HJ10&#xff09; HJ1 字符串最后一个单词的长度 描述 计算字符串最后一个单词的长度&#xff0c;单词以空格隔开&#xff0c;字符串长度小于5000。&#xff08;注&#xff1a;字符串末尾不以空格为结尾&#xff09; 输入描述&…

MySQL原理(三)锁定机制(2)表锁行锁与页锁

前面提到&#xff0c;mysql锁按照操作颗粒分类&#xff0c;一般认为有表级锁、行级锁、页面锁三种。其实还有一种特殊的全局锁。 锁场景问题全局锁全库逻辑备份加了全局锁之后&#xff0c;整个数据库都是【只读状态】&#xff0c;如果数据库里有很多数据&#xff0c;备份就会花…

撰写出色的时事政治新闻资讯稿:窍门和技巧

撰写出色的时事政治新闻资讯稿&#xff1a;窍门和技巧 文章大纲写新闻/资讯&#xff08;结构部分&#xff09;较为复杂的标题&#xff08;额外扩展&#xff09;相关案例去除引题去除引题和副题注意事项讲一下什么叫导语。叙述式结论式描写式提问式摘要式 主体一要新二要“小”三…

C++多线程3

生产者消费者模型 OS经典问题&#xff0c;生产者消费者模型,empty和full还有mutex对应到C上如何处理看代码即可 #include <iostream> #include <thread> #include <mutex> #include <condition_variable> #include <queue> using namespace st…

ElementUI Form:Select 选择器

ElementUI安装与使用指南 Select 选择器 点击下载learnelementuispringboot项目源码 效果图 el-select.vue&#xff08;Select选择器&#xff09;页面效果图 项目里el-select.vue代码 <script> export default {name: el_select,data() {return {options: [{value…

模糊神经网络控制器(MATLAB)

模糊神经网络控制器(Fuzzy Neural Network Controller)是将模糊控制和神经网络相结合的一类控制器。它综合了两者的优点,主要包括以下特点: 知识表达能力强。模糊系统的语言规则和神经网络的学习能力相结合,可以表示复杂的非线性映射关系。 自适应能力强。神经网络提供了在线学…

MySQL进阶之锁(全局锁以及备份报错解决)

锁 全局锁 全局锁就是对整个数据库实例加锁&#xff0c;加锁后整个实例就处于只读状态&#xff0c;后续的DML的写语句&#xff0c;DDL语 句&#xff0c;已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份&#xff0c;对所有的表进行锁定&#xff…

go数据格式-JSON、XML、MSGPack

1. JSON json是完全独立于语言的文本格式&#xff0c;是k-v的形式 name:zs应用场景&#xff1a;前后端交互&#xff0c;系统间数据交互 json使用go语言内置的encoding/json 标准库编码json使用json.Marshal()函数可以对一组数据进行JSON格式的编码 func Marshal(v interface{}…

springboot与springcloud之间的版本对应关系

https://start.spring.io/actuator/info 当然&#xff0c;你可以直接在&#xff1a; https://spring.io/projects/spring-cloud 上看文档查询&#xff0c; 不过&#xff0c;最后应该是调到这里的&#xff1a; https://github.com/spring-cloud/spring-cloud-release/wiki/Suppo…

YoloV8改进策略:Block改进|DCNv4最新实践|高效涨点|完整论文翻译

摘要 涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.991,mAP50-95由0.737涨到0.753,涨点明显! DCNv4是可变形卷积的第四版,速度和v3相比有了大幅度的提升,但是环境搭建有一定的难度,对新手不太友好。如果在使用过程遇到编译的问题,请严格按照我写的环境配置。…