自动化测试的简单认识

news2024/11/23 17:12:40

        1.什么是自动化测试

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

2.常见的WebDriver的API

定位元素常用的是 findelement方法

        比如在我们想要测试百度搜索的功能的时候,你得先找到百度的搜索框:

先通过浏览器的开发者工具

 就能知道class的名称;        

 public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        //允许所有请求
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //找到百度搜索输入框
        WebElement webElement = webDriver.findElement(By.cssSelector(".s_ipt"));
        //输入 测试的数据
        webElement.sendKeys("软件");
        
    }

        2.1 css定位

(css选择语法:)

        id选择器 :#id

        标签选择器 : 标签名

        后代选择器 : 后级选择器 子级选择器

        类选择器 :.类名

        2.2 xpath定位

2.2.1 绝对路径 

        例如:/html/head/title 但是效率低 不常用

2.2.2 相对路径

        相对路径 + 索引 : 

//form/span[1]/input

        相对路径 + 属性值 :

//input[@class="s_ipt"]

        相对路径 + 通配符 : 

//*[@*="su"]

        相对路径 + 文本匹配 :

//a[text()="新闻"]

        ....

2.2  xpath定位

        xpath定位分俩种 一是绝对路径还有就是相对路径,相对路径还有很多的方式去实现:

 但是完全可以使用浏览器的开发者工具来进行copy xpath 直接复制粘贴到代码就ok了 。

2.3 click / send     

  1. click() 方法用于模拟鼠标单击操作,即点击页面元素或按钮,触发相应的事件。该方法可以用于定位和操作各种类型的元素,如按钮、链接、单选框、复选框等。

  2. send_keys() 方法用于模拟在输入框中键入文本或按键,例如输入用户名、密码、搜索关键字等。该方法只能用于文本输入元素(如 input、textarea),不能用于其他类型的元素(如按钮、链接、单选框、复选框)。一般情况下,send_keys() 方法需要结合清空操作 clear() 使用,以确保输入的值是预期的。

这里面要注意的是 click和submit的区别 : 如果要提交的是form表单中的元素,此时submit和click的效果是一样的,但是如果不是,使用submit的方式去提交会报错的。


简单的使用:

 public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        // 允许所有请求
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        // 打开百度
        webDriver.get("https://www.baidu.com");
        // 找到输入框
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        // 输入软件测试
        element.sendKeys("selenium");
        // 找到百度一下按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        
    }

2.4 等待

        2.4.1 sleep休眠 

        直接调用sleep方法就行,还需抛一个异常。

        2.4.2 智能等待

        ① 隐式等待

 上述代码中,将隐式等待设置为 3 秒,当使用 findElement 方法定位元素时,如果元素未出现,WebDriver 将等待 3 秒钟,如果在规定时间内元素出现了,就不再等待,立即返回元素对象。

        ② 显示等待

public static void main(String[] args) {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        //采用显示等待的操作 最长等待三秒
        WebDriverWait webDriverWait = new WebDriverWait(webDriver,3);
        WebElement element1 = webDriverWait.until(ExpectedConditions.presenceOfElementLocated(By.id("kw")));
        WebElement element = webDriver.findElement(By.id("kw"));
    }

从上面俩个案例就可以看出:隐式等待等待的是所有元素,而显示等待的是你自定义的条件。

2.5 浏览器的操作

        2.5.1 前进、后退以及刷新

    public static void main(String[] args) throws InterruptedException {
        //进行浏览器的操作练习
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        // 找到输入框
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        // 输入数据 : csdn
        element.sendKeys("csdn");
        // 找到百度一下按钮 并点击按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //后退
        webDriver.navigate().back();
        sleep(3000);
        //刷新
        webDriver.navigate().refresh();
        sleep(3000);
        //前进
        webDriver.navigate().forward();
    }

        2.5.2 滑动条 、窗口

    public static void main(String[] args) throws InterruptedException {
        //进行浏览器的操作练习
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        // 找到输入框
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        // 输入数据 : csdn
        element.sendKeys("csdn");
        // 找到百度一下按钮 并点击按钮
        webDriver.findElement(By.cssSelector("#su")).click();     
        //接下来要进行 滑动条、窗口操作
        sleep(3000);
        //此操作就是将滑动条拖到最下方
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");

        sleep(3000);
        //F11操作 全屏
        webDriver.manage().window().fullscreen();
        sleep(3000);
        //最大 以及 自定义尺寸
        webDriver.manage().window().maximize();
        sleep(3000);
        webDriver.manage().window().setSize(new Dimension(600,1000));
    }

记得是 先manage再window~~

2.6 鼠标操作

        在java中 Selenium支持Actions类来进行模拟鼠标单击双击右键等操作:

    public static void main(String[] args) {
        //模拟鼠标操作
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        //找到 目标的位置
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"s-top-left\"]/a[1]"));
        Actions action = new Actions(webDriver);
        //perform 提交操作意思是
        //单
        action.click(element).perform();
        //双击
        action.doubleClick(element).perform();
        //右键
        action.contextClick(element).perform();
    }

2.7 键盘操作(组合操作)

public class Example {
    public static void main(String[] args) {
        // 创建 Chrome 浏览器实例
        WebDriver driver = new ChromeDriver();

        // 打开页面并定位元素
        driver.get("https://www.google.com");
        WebElement searchInput = driver.findElement(By.name("q"));

        // 在搜索框中输入关键字"Java",并按下组合键CTRL+A,CTRL+X,CTRL+V
        searchInput.sendKeys("Java");
        searchInput.sendKeys(Keys.chord(Keys.CONTROL, "a"), Keys.chord(Keys.CONTROL, "x"),
                Keys.chord(Keys.CONTROL, "v"));
    }
}

上述代码中,使用了 Selenium 的 Keys 类来模拟组合键的操作,例如按下 CTRL+A,CTRL+X,CTRL+V 将文本框中的内容全选、剪切、粘贴。注意可以使用 Keys.chord() 方法将多个按键组合在一起。

2.8 退出操作

    public static void main(String[] args) {
        //退出操作
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        webDriver.quit();
        webDriver.close();
    }

2.9 截图操作    

    public static void main(String[] args) throws InterruptedException, IOException {
        //截图操作
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("csdn");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(file,new File("D://123.png"));
    }

 2.10 窗口切换

        此操作是为了应对 如果是多个页面操作的话,对新页面进行操作 但是句柄还是开始的页面 就没办法进行后续操作了:其实简单理解就是切换窗口,就比如说你从百度搜索搜到bilibili网页,你想打开视频观看,但是你现在的窗口还是百度一下这个页面,怎么看视频啊?所有才需要窗口切换~        

    public static void main(String[] args) {
        //切换窗口
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("csdn");
        webDriver.findElement(By.cssSelector("#su")).click();
        String now_handle = "";
        Set<String> set = webDriver.getWindowHandles();
        for(String hanle : set){
            //此操作就是更新 最新的窗口
            now_handle = hanle;
        }
        webDriver.switchTo().window(now_handle);
        //接下来 你就可以操作 csdn搜索的这个页面的任何元素了
    }

        

2.11 多框架情况      

    public static void main(String[] args) {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:8080/j-20230520-testcode/src/main/Page/test02.html?_ijt=arpr09o5r3gegeidj4o2r6hc9b&_ij_reload=RELOAD_ON_SAVE");
        webDriver.switchTo().frame("f1");
        // 点击里面的click
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();
        //上述代码中,使用 switchTo().frame() 方法切换到 id 为 "f1" 的框架,并在框架中查找元素并进行操作。
        // 当需要回到默认的上下文中时,可以使用 switchTo().defaultContent() 方法。
    }

 按钮是在f1框架的,所以要先切换到f1框架再操作。

2.12 选取选项中的value值 

 

 

2.13 alert操作

    public static void main(String[] args) throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("file:///D:/java%20demo/java%20git/javademo/javademo/j-20230520-testcode/src/main/Page/test04.html");
        webDriver.findElement(By.cssSelector("body > button")).click();
        sleep(3000);
        //弹窗取消
        webDriver.switchTo().alert().dismiss();
        sleep(3000);
        //点击按钮
        webDriver.findElement(By.cssSelector("body > button")).click();
        //输入值
        webDriver.switchTo().alert().sendKeys("你好");
        sleep(3000);
        //确认alert
        webDriver.switchTo().alert().accept();
    }

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

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

相关文章

MySQL 锁篇

1. MySQL 有哪些锁&#xff1f; 1&#xff09;全局锁 执行后整个数据库就处于只读状态&#xff0c;一般用于全库逻辑备份 2&#xff09;表级锁&#xff1a; 表锁&#xff1a; 表级别的共享锁&#xff1a;读锁 表级别的独占锁&#xff1a;写锁 元数据锁&#xff08;MDL&am…

一文吃透 Vue 框架教程(下)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【Spring】— MyBatis配置文件元素

目录 MyBatis配置文件元素properties元素settings元素typeAliases元素typeHandler元素objectFactory元素plugins元素environments元素mappers元素 MyBatis配置文件元素 使用MyBatis框架进行开发&#xff0c;需要创建MyBatis的核心配置文件&#xff0c;该配置文件包含重要的元素…

sqlite数据如何转成mysql数据类型

一、使用工具Navicat Premium 16 1.把db文件拖到Navicat Premium中&#xff0c;选择数据库&#xff0c;点击工具&#xff0c;数据传输 选择下一步 下一步 开始 这样就成功了&#xff0c;生成的sql文件就在你保存的位置了。 二、使用SQLiteStudio转换成mysql文件 1.打开SQLite…

关键字volatile 和信号

volatile是c语言中的一个关键字&#xff0c;在语言层面我们很难理解它&#xff0c;今天从信号角度我们来理解一下。 我们来看下面一段代码&#xff1a; 从代码表面看上去运行逻辑应该是&#xff0c;flag为0时候一直while循环&#xff0c;当有信号2产生进入到信号2的处理函数中…

Java - 集合工具类Collections

文章目录 目录 文章目录 前言 二.collections提供的方法 三. 方法详解 1.addAll:将所有指定元素添加到指定 collection 中。 可变参数 添加方式 二.shuffle()&#xff1a;随机打乱List集合中的元素 三. sort()&#xff1a;对List集合进行排序&#xff1b; 实现compata…

软件测试:提升jemeter报告输出品质,精通动态参数处理技巧并进行组件极致优化

目录 引言 一.测试报告生成 二.动态参数处理 1.正则 2.json提取器 3.JMeter动态参数处理逻辑是什么&#xff1f;【面试必考】 三.jemter常用的组件 四.JMeter是怎么做API自动化测试的&#xff1f; 五.针对一个服务&#xff0c;你怎么测试&#xff1f; 引言 当今互联网…

spring jpa/hibernate 查询缓存导致内存溢出

版本 hibernate-5.6.10 问题 应用运行一段时间后发生堆空间不足内存溢出 根据内存快照可见大量org.hibernate.engine.query.spi.QueryPlanCache对象 原因 QueryPlanCache会缓存sql&#xff0c;以便于相同的sql重复编译 如果大量使用in查询&#xff0c;由于参数数量不同&a…

《程序员面试金典(第6版)》面试题 02.02. 返回倒数第 k 个节点(双指针法,链表)

题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 题目传输门&#xff1a;添加链接描述 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4说明&#xff1a; 给定的 k 保证是有效的。 解题思路与…

Axure教程-横向动态堆叠图(中继器)

本文将教大家如何用AXURE中的中继器动态横向堆叠图 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://3ajwd3.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87810612 二、功能介绍 简单填写中继器内容即可生成动态竖向堆…

移动应用测试不可少的技能,使用Appium和Python实现Activity切换

目录 前言&#xff1a; 一、Appium简介 二、切换Activity操作 三、使用 Appium 实现切换 Activity 操作的注意事项 四、结论 前言&#xff1a; App测试自动化是当前移动应用开发测试领域中的热点之一。在应用开发的过程中&#xff0c;切换Activity是一个常见的操作&#x…

网易易盾流量多发反外挂落地实践

背景及目的 环境迁移 反外挂服务建德机房线上迁移&#xff0c;采取的方案是&#xff1a;建德机房独立部署一套完整的集群&#xff0c;统一经由完整的性能测试、故障演练、功能回归后&#xff0c;通过线上分阶段切换流量的方式来切服务。QA 需要比对验证 2 个不同环境下核心接口…

PostgreSQL技术内幕(八)源码分析 ——投影算子和表达式计算

在上期Postgres技术内幕系列直播中&#xff0c;我们为大家介绍了Postgres投影算子和表达式计算实现原理和底层细节。本文根据直播内容整理&#xff0c;作者现任HashData内核研发工程师。 投影 (projection) 关系代数中的一种&#xff0c; 用于从关系R中选出属性包含在A中的列…

简单易懂,一篇文章告诉你什么是云渲染!

随着5G、AI、云计算、云服务等资讯来袭&#xff0c;我们发现云渲染被更多人知晓和关注&#xff0c;通过搜集和调研云渲染业内的相关信息和模式&#xff0c;尽量用简明的方式为大家解答到底 什么是云渲染。 用户将本地任务提交到远程服务器&#xff0c;通过远程的计算机集群资源…

C++ 类和对象(静态的static、友元、内部类、匿名对象、explicit)知识点+完整思维导图+实操图+深入细节通俗易懂建议收藏

绪论 时间的步伐有三种&#xff1a;未来姗姗来迟&#xff0c;现在像箭一样飞逝&#xff0c;过往永远静立不动。本章是类和对象的一个收尾篇&#xff0c;相信通过这三篇类和对象的学习&#xff0c;应该你已经更加清楚了解了C的类和对象。 话不多说安全带系好&#xff0c;发车啦&…

耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道····

一提及外包测试&#xff0c;大部分人的第一印象就是&#xff1a;工作强度大&#xff0c;技术含量低&#xff0c;没有归属感&#xff01; 本人毕业于某普通二本院校非计算机专业&#xff0c;跨专业入行测试&#xff0c;至今有近 5年工作经验。 第一份测试工作是在华为做了两年外…

【LCM】LCM通讯入门

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍LCM的通讯。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 &#x1f95e;喜欢的朋友可以关注一下&#xff0c;下次更新…

Linux-初学者系列6_kvm虚拟机

速通配置kvm虚拟机 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。 在一台计算机上同时运行多个逻辑计算机&#xff0c;每个逻辑计算机可以运行不同的操作系统&#xff0c;并且应用程序都可以在相互独立的空间内运行互不影响&#xff0c;提高计算机的工作效率。 一、 配置…

真题详解(include)-软件设计(八十二)

真题详解&#xff08;快速排序&#xff09;-软件设计&#xff08;八十一)https://blog.csdn.net/ke1ying/article/details/130806047 generalliza&#xff08;泛化&#xff09;&#xff1a;泛化是一种继承关系&#xff0c;子类将继承基类所有行为&#xff0c;关系和通信&#…

章节2:Burp Suite配置启动

章节2&#xff1a;Burp Suite配置启动 01 Burp Suite程序下载 程序下载 Burp Suite jar包JDK&#xff0c;JDK包含JRE&#xff08;Java运行时环境&#xff09;激活jar包汉化jar包 Burp jar包 推荐2021&#xff0c;jar包版本 https://portswigger.net/burp/releases JRE环…