《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)

简介: 【2月更文挑战第14天】《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本。前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容,首先宏哥搭建好的环境中创建首个完整的自动化测试脚本,让小伙伴或者童鞋们提前感受感受,也是为了激起大家的学习兴趣。宏哥的个人经验是:自动化脚本编写比较容易,最大的困难去如何去写测试断言。自动化测试,最重要的还是落在测试上面,而不是自动化,自动化只是手段。

 1.简介

前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本。前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容,首先宏哥搭建好的环境中创建首个完整的自动化测试脚本,让小伙伴或者童鞋们提前感受感受,也是为了激起大家的学习兴趣。

宏哥的个人经验是:自动化脚本编写比较容易,最大的困难去如何去写测试断言。自动化测试,最重要的还是落在测试上面,而不是自动化,自动化只是手段。断言的写法,就考验出一个测试工程师是否考虑全面,体现出你的用例编写水平。

2.测试用例

很多童鞋或者小伙伴们可能会有这样有个误区:自动化测试是不需要设计测试用例的。其实不然它也是需要设计测试用例,然后根据用例进行脚本的编写和断言,只不过是把用例以代码的形式体现出来,而机器恰好可以识别代码,将代码跑起来,其实就是在执行你的用例,只不过是由机器帮你自动执行。好了废话少说开始说说宏哥今天要做的测试是:打开百度,输入selenium搜索,验证打开链接有没有Selenium官网链接。

测试用例:打开百度首页,搜索Selenium,然后检查搜索列表,有没有Selenium官网链接。

2.1分析

我们输入了url,然后打开一个页面,如果判断这个页面是不是我们提前知道的页面呢。

1. 获取当前url是不是和输入的一致,假如链接没有发生重定向。

2. 获取当前页面title,是不是我们期待的结果。

3. 在页面元素body找一个特征元素,这个特征元素能够代表是该网站。

      我想,也大概只有上面三点依据可以判断我们访问的网站对不对。第一点,有时候不靠谱,不知道你们是否听说过盗链,就是输入一个网站URL,显示的内容是别人的网站,而不是你测试的网站。甚至有链接的重定向出现。第二点,还是比较考虑,title这个值是网站前端开发同学写入的,基本上可以代表是你要打开的网站。第三点,有点难找这样的特征元素,而且有时候找到了也不一定是正确的。下面的代码就用页面的title来作为我们判断的依据。

2.2步骤

1.启动浏览器

2.打开百度首页:http://www.baidu.com

3.判断这个页面是不是我们提前知道的页面

4.定位搜索输入框,记录下输入框元素的xpath表达式://*[@id='kw']

5.定位搜索提交按钮(百度一下),获取xpath表达式://*[@id='su']

6.在搜索输入框输入:Selenium,点百度一下这个按钮

7.在搜索结果列表去判断是否存在Selenium官网这个链接

8.退出浏览器,结束测试

2.3代码设计

1.根据步骤进行测试脚本的编写。lessons->new->class,命名为:FirstScript。开始编写脚本。如下图所示:

image.gif 编辑

2.4参考代码

package lessons;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
/**
 * @author 北京-宏哥
 *
 * 2021年6月24日
 */
public class FirstScript {
    
    public static void main(String[] args) {
        
        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  
        
         WebDriver driver = new ChromeDriver();  
            
         driver.manage().window().maximize();  
             
         driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);     
        
         driver.get("https://www.baidu.com");  //地址栏输入百度地址
         
         //判断title是不是 百度一下,你就知道
         
         try{
             String baidu_title = "百度一下,你就知道";
             assert baidu_title == driver.getTitle();
             System.out.println("Test Pass");
             
         }catch(Exception e){
             e.printStackTrace();
         }
         
         driver.findElement(By.id("kw")).sendKeys("Selenium");//搜索输入框输入Selenium
       
         driver.findElement(By.id("su")).click();//点击百度一下按钮
         
         //设置隐性等待时间  
         driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);  
         
         //这里通过元素XPath表达式来确定该元素显示在结果列表,从而判断Selenium官网这个链接显示在结果列表。
         
         WebElement ele_string=driver.findElement(By.xpath("//*[@id='1']/h3/a[1]"));
         
         
         String ele_string1 = ele_string.getText();
         
         System.out.println(ele_string1);
         
         try{
         
             if(ele_string1.equals("Selenium automates browsers. That's it!")){
             
                 System.out.println("Testing is successful!");
                
             }
         }catch(Exception e){
             e.printStackTrace();
         }
              
         //关闭并退出浏览器  
         driver.quit();  
    }
}

image.gif

      Java中有一个方法叫assert,中文意思叫断言,assert后面跟着的是一个表达式,表达式的值是布尔型。上面的例子就是,当判断表达式值是true,就打印Tess Pass。这里可以看到,我把断言部分代码放在try cathc语句中。编写脚本或者编写代码要养成一个好习惯,习惯主动去捕获异常,并处理异常。这里我们自动化脚本,基本上没有需要去处理异常,一般选择直接打印出异常信息就可以。

      到这里,Selenium WebDriver基础篇就结束了,下面的文章,主要是介绍WebDriver的一些常见接口或者方法的实际使用,尽量多介绍一些Selenium方法,为后面的方法封装和框架设计做铺垫。

2.5运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

image.gif 编辑

2.电脑端的浏览器,如下小视频所示:

之前录制的视频上传到一个免费的平台可以在线预览,结果这段时间可能平台会过一段时间清理,结果就没有了,想看的自己可以运行一下代码。

3.小结

3.1equals和==的区别

宏哥这里简单的说一下,更详细的你可以百度查一下。关于判断两个字符串是否相等的问题。在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写。在java中,用的是equals();

例:A字符串和B和字符串比较:


if(A.equals(B)){
}

image.gif

返回true 或false.

String 的equals 方法用于比较两个字符串是否相等。由于字符串是对象类型,所以不能用简单的“==”判断。而使用equals比较两个对象的内容是否相等。

注意:equals()比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”比较两个对象时,比较的是两个对象的内存地址,所以不相等。即使它们内容相等,但是不同对象的内存地址也是不相同的。

好了,首页java+selenium的自动化测试脚本就分享到这里,感谢你耐心地阅读!

相关文章
|
Oracle Java 关系型数据库
Java 简单教程
Java是跨平台、面向对象的编程语言,广泛用于企业开发、Android应用等。本教程涵盖环境搭建、基础语法、流程控制、面向对象、集合与异常处理,助你快速入门并编写简单程序,为进一步深入学习打下坚实基础。
735 0
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
543 10
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
1689 4
|
缓存 安全 Java
Java 并发新特性实战教程之核心特性详解与项目实战
本教程深入解析Java 8至Java 19并发编程新特性,涵盖CompletableFuture异步编程、StampedLock读写锁、Flow API响应式流、VarHandle内存访问及结构化并发等核心技术。结合电商订单处理、缓存系统、实时数据流、高性能计数器与用户资料聚合等实战案例,帮助开发者高效构建高并发、低延迟、易维护的Java应用。适合中高级Java开发者提升并发编程能力。
705 0
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
640 1
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
568 1
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
535 0
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
730 16
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。