《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

简介: 【6月更文挑战第17天】本文是一篇关于使用Selenium和TestNG进行数据驱动测试的教程。作者宏哥通过实例展示了如何处理多个用户登录场景。

1.简介

今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中。

2.测试场景

测试多个用户的账号login。假如宏哥有50个用户,需要测试login。你会怎么测试呢。第一个肯定是写50个测试脚本去验证login。第二个就是采用DDT,把用户名和密码写到一个表格里,然后依次从表格读取去运行这个login用例。很显然第一个不可取,如果有1000个,10000个...那你不得累死,很有可能最后落个费力不讨好的结果。如果是一个或者两个用户,那么第一个和第二个基本上没什么区别,有时候第一个反而比第二个简单。这就得你自己灵活判断了。也就是所说的经验。

3.实际应用1

1.假如宏哥有2个用户login,宏哥将用户的账户数据存储在二维数组。就可以轻松搞定,其实这种前边我们已经介绍过这里不赘述,宏哥就一笔带过了。这里就会用到前边学习到的知识:就是前边讲解那个传对象的数据驱动测试例子。

3.1代码设计

3.2参考代码

package library;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

*

* 2022年2月28日

*/


public class TestDDT {


   @Test(dataProvider="testdata")

   public void TestLogin(String username, String password) throws InterruptedException{

 

       System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");

       WebDriver driver = new ChromeDriver();

       driver.manage().window().maximize();

       driver.get("https://www.baidu.com");

       Thread.sleep(3000);

       // click login link

       driver.findElement(By.xpath("//*[@id='u1']/a[1]")).click();

       Thread.sleep(2000);

   

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__userName']")).clear();

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__userName']")).sendKeys(username);

       Thread.sleep(2000);

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]")).clear();

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]")).sendKeys(password);

       Thread.sleep(5000);

       System.out.println("browser will be close");

       driver.quit();

   }

   

   @DataProvider(name="testdata")

   public Object[][] TestDataFeed(){

       //创建一个二维数组

       Object [][] baidudata=new Object[2][2];

       

       baidudata = new Object[][] {

               { "test@gmail.com", "test@gmail.com" },

               { "test@yahoo.com", "test@yahoo.com" }

       };

       System.out.print(baidudata);


       return baidudata;

   

   }

}

3.3运行代码

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

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

4.实际应用1

1.假如宏哥有50个用户login,第一种方法也可以,就按上边宏哥的思路,将50个用户的登录信息存储在二维数组中,就可以,但是因为文章主要讲解的是数据驱动测试,因此宏哥在这里就介绍第二个:用TestNG和excel文件实现DDT场景。我们需要准备一个test-data.xlsx文件,并且放到eclipse项目下。这里就用到前边讲解的如何操作Excle文件的知识了。

4.1测试步骤

1.准备test-data.xlsx文件,并将文件放在对应测试脚本位置,宏哥这里就举例在Excle中写了三个用户的登录信息。如下图所示:

2.利用POI读取excel文件内容,并保存到一个二维数组中。

4.2代码设计

4.3参考代码

package library;


import java.io.File;

import java.io.FileInputStream;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.openqa.selenium.By;  

import org.openqa.selenium.WebDriver;  

import org.openqa.selenium.chrome.ChromeDriver;  

import org.testng.annotations.DataProvider;  

import org.testng.annotations.Test;  


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

*

* 2022年2月28日

*/


public class DDT {

   @Test(dataProvider="testdata")  

   public void TestLogin(String username, String password) throws InterruptedException{  

 

       System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  

       WebDriver driver = new ChromeDriver();  

       driver.manage().window().maximize();  

       driver.get("https://www.baidu.com");  

         

       Thread.sleep(3000);

       // click login link

       driver.findElement(By.xpath("//*[@id='u1']/a[1]")).click();

       Thread.sleep(2000);

   

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__userName']")).clear();

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__userName']")).sendKeys(username);

       Thread.sleep(2000);

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]")).clear();

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]")).sendKeys(password);

       Thread.sleep(5000);

       System.out.println("browser will be close");

       driver.quit();

         

   }  

     

   @DataProvider(name="testdata")

   public Object[][] TestDataFeed() throws Exception{

 

       File src = new File(".\\Files\\test-data.xlsx");  

       FileInputStream fis = new FileInputStream(src);  

         

       @SuppressWarnings("resource")  

       XSSFWorkbook wb=new XSSFWorkbook(fis);    

       XSSFSheet sh1= wb.getSheetAt(0);  

       int numberrow = sh1.getPhysicalNumberOfRows();

           

       Object [][] baidudata=new Object[numberrow][2];

       

       for(int i=0;i){  

           

               baidudata[i][0] = sh1.getRow(i).getCell(0).getStringCellValue();

               baidudata[i][1] = sh1.getRow(i).getCell(1).getStringCellValue();

           }

       

       return baidudata;

       

   }

}

4.4运行代码

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

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

5.小结

1.使用代码运行过程中报错:org.openqa.selenium.InvalidElementStateException: invalid element state,如下图所示:

2.解决办法:

宏哥也知道报这个错误是由于元素可能还没有加载出来, 需要添加selenium的wait方法 或者使用 Thread.sleep()等,但是等了一段时间之后,该元素仍无法使用 click,clear 或者是sendKeys等方法。但是增加了等待方法依旧报相同的错误,三大等待方法都试了个遍都是相同错误,奇怪了啊。宏哥查了好多资料也是说需要等待方法去解决,可是加了等待方法还是无济于事,就当宏哥就要放弃时候,突然想到了一种可能性会不会是宏哥的定位方法有错误啊,可是F12利用Ctrl+F输入xpath表达式定位发现定位是正确的啊,正在这时突然发现定位密码的输入框定位是最外层根本无法输入,需要定位到input才可以clear,sendkeys。修改定位方法问题解决。

错误定位密码输入框代码:

driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']")).sendKeys(password);

正确定位密码输入框代码:

driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]")).sendKeys(password);

image.png

3.而且回过头来看,发现前边运行代码只有用户名输入,密码根本没有输入进去。如下图所示:

image.png



每天学习一点,今后必成大神-


往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):


Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

 

相关文章
|
4月前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
6月前
|
人工智能 运维 Prometheus
AIOpsLab:云服务自动化运维 AI,微软开源云服务 AI 框架,覆盖整个生命周期
AIOpsLab 是微软等机构推出的开源框架,支持云服务自动化运维,涵盖故障检测、根本原因分析等完整生命周期。
328 13
AIOpsLab:云服务自动化运维 AI,微软开源云服务 AI 框架,覆盖整个生命周期
|
6月前
|
人工智能 编解码 自然语言处理
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
AGUVIS 是香港大学与 Salesforce 联合推出的纯视觉 GUI 自动化框架,能够在多种平台上实现自主 GUI 交互,结合显式规划和推理,提升复杂数字环境中的导航和交互能力。
274 8
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
|
7月前
|
人工智能 Linux API
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
PromptWizard 是微软开源的 AI 提示词自动化优化框架,通过自我演变和自我适应机制,迭代优化提示指令和上下文示例,提升大型语言模型(LLMs)在特定任务中的表现。本文详细介绍了 PromptWizard 的主要功能、技术原理以及如何运行该框架。
536 8
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
|
7月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
1878 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
6月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
303 15
|
7月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
306 7
|
9月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
392 5
|
7月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
231 31
Selenium IDE:Web自动化测试的得力助手
|
7月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
466 17
Selenium:强大的 Web 自动化测试工具

热门文章

最新文章