java+testng+selenium的自动化测试实例
作者:潇洒却风流 发布时间:2022-09-07 02:36:54
标签:java,testng,selenium,自动化测试
前言
这是用testng框架加selenium做的一个UI自动化测试的项目
Java代码
package com.justin;
/**
?* @author justin-zhu
?* <p>
?* 2022年02月23日 16:48
?*/
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.*;
import java.util.concurrent.TimeUnit;
public class HelloTestNG {
? ? private WebDriver driver;
? ? @BeforeMethod
? ? public void setBefore(){
? ? ? ??
? ? ? ? System.setProperty("webdriver.chrome.driver","C:\\Users\\betalpha-qa\\code\\testcode\\TestNG-Demo\\src\\main\\resources\\chromedriver.exe");
? ? ? ? //打开浏览器,使其最大化,并隐性等待两秒钟
? ? ? ? driver = new ChromeDriver();
? ? ? ? driver.manage().window().maximize();
? ? ? ? driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
? ? }
? ? @AfterMethod
? ? public void setAfter(){
? ? ?? ?//结束驱动程序进程,关闭浏览器
? ? ? ? driver.quit();
? ? }
? ? @Test(groups = {"login"})
? ? public void login() throws InterruptedException {
? ? ? ? //输入网址(输入本地项目的URL,下面为本地项目的登陆界面)
? ? ? ? driver.get("http://192.168.0.188/webapp/session/login");
? ? ? ? driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
? ? ? ? //使用其方法获取浏览器类型,并断言(如果断言失败,不会执行下面代码)
? ? ? ? String browserType = driver.getTitle();
? ? ? ? Assert.assertEquals("Google", browserType);
? ? ? ? //获取账号框定位
? ? ? ? WebElement userName = driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/form/div/div[2]/div/div[1]/div/input"));
? ? ? ? //获取密码框定位
? ? ? ? WebElement password = driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/form/div/div[3]/div/div[1]/div/div/span/input"));
? ? ? ? //获取验证码框定位
? ? ? ? WebElement authCode = driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/form/div/div[4]/div/div/div[1]/div/input"));
? ? ? ? WebElement loginButton = driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/form/div/div[5]/div/div/div/button"));
? ? ? ? //输入账号密码登录,并点击登录
? ? ? ? userName.sendKeys("jusitn@qq.com");
? ? ? ? password.sendKeys("123456");
? ? ? ? authCode.sendKeys("1234");
? ? ? ? driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
? ? ? ? loginButton.click();
? ? ? ? driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
? ? ? ? //获取登录界面的title,验证登录成功
? ? ? ? WebElement title = driver.findElement(By.xpath("//*[@id=\"logo\"]/div/div/div[1]/h1"));
? ? ? ? String actual = title.getText();
? ? ? ? Assert.assertEquals(actual, "指数研发与管理平台");
? ? }
? ?@Test(description = "定位百度一下")
? ? public void testBaiDu(){
? ? ? ? //输入网址
? ? ? ? driver.get("https://www.baidu.com/");
? ? ? ? driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);
? ? ? ? //定位到百度一下按钮
? ? ? ? WebElement name = driver.findElement(By.id("su"));
? ? ? ? String text = name.getAttribute("value");
? ? ? ? Assert.assertEquals(text, "百度一下");
?? ?}
?? ?
?? ?@Test(groups = {"fast"})
? ? public void aFastTest(){
? ? ? ? System.out.println("Fast test");
? ? }
? ? @Test(groups = {"slow"})
? ? public void aSlowTest(){
? ? ? ? System.out.println("Slow test");
? ? }
}
配置文件
要想上面的test能跑起来,还需要再pon.xml文件里面添加以下依赖
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.testng</groupId>
? ? ? ? ? ? <artifactId>testng</artifactId>
? ? ? ? ? ? <version>6.14.3</version>
? ? ? ? ? ? <scope>test</scope>
? ? ? ? </dependency>
这是testng框架的依赖,有了这个依赖testng的注释才会生效
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server -->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.seleniumhq.selenium</groupId>
? ? ? ? ? ? <artifactId>selenium-server</artifactId>
? ? ? ? ? ? <version>3.14.0</version>
? ? ? ? </dependency>
如果你只在本地运行代码,那么有selenium-java就够了;但是如果要在远程调用,就需要配置该selenium-server依赖
?? ??? ?<dependency>
? ? ? ? ? ? <groupId>org.seleniumhq.selenium</groupId>
? ? ? ? ? ? <artifactId>selenium-chrome-driver</artifactId>
? ? ? ? ? ? <version>2.42.2</version>
? ? ? ? </dependency>
这是想要再界面上操作元素配置的依赖
扩展
testng用例可以直接运行java代码,也可以配置testng.xml文件进行用例的执行
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "testProj">
? ? <test name = "testDemo1">
<!-- ? ? ? ?.XML中指定组内的某些方法,include为执行,exclude为不执行-->
? ? ? ? <groups>
? ? ? ? ? ? <run>
? ? ? ? ? ? ? ? <exclude name="fast"/>
? ? ? ? ? ? ? ? <exclude name="slow"/>
? ? ? ? ? ? ? ? <include name="login"/>
? ? ? ? ? ? </run>
? ? ? ? </groups>
<!-- ? ? ? ?.XML指明测试类,按照类名执行-->
? ? ? ? <classes>
? ? ? ? ? ? <class name="com.justin.HelloTestNG"/>
? ? ? ? </classes>
<!-- ? ? ? ?.XML指定包名,执行包内的所有测试类-->
<!-- ? ? ? ?<packages>-->
<!-- ? ? ? ? ? ?<package name="com.justin"></package>-->
<!-- ? ? ? ?</packages>-->
? ? </test>
? ??
? ? <listeners>
? ? ? ? <listener class-name="org.uncommons.reportng.HTMLReporter"></listener>
? ? ? ? <listener class-name="org.uncommons.reportng.JUnitXMLReporter"></listener>
? ? </listeners>
</suite>
来源:https://blog.csdn.net/weixin_43956642/article/details/123843320


猜你喜欢
- package cn.hackcoder.beautyreader.broadcast;import android.content.Bro
- 1:Maven命令下载源码和javadocs当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven
- 今天研究了一下scope的作用域。默认是单例模式,即scope="singleton"。另外scope还有prototy
- 支付宝的接入相对比较简单,看看支付宝官网的文档基本都能搞定,但是切记一点让你们的后台也要搞清楚支付宝的流程,重中之重。1、注意事项 开发前一
- 流读取导致StringBuilder.toString()乱码乱码问题StringBuilder sb = new StringBuilde
- 在工作中,我们经常使用线程池,但是你真的了解线程池的原理吗?同时,线程池工作原理和底层实现原理也是面试经常问的考题,所以,今天我们一起聊聊线
- SVN出现提示org.apache.subversion.javahl.ClientException: Attempted to lock
- fifter、servlet、interceptorfifter用来处理请求头、请求参数、编码的一些设置,然后转交给servlet,处理业务
- 1. 什么是静态内部类在Java中有静态代码块、静态变量、静态方法,当然也有静态类,但Java中的静态类只能是Java的内部类,也称为静态嵌
- 本文实例讲述了C#编程获取各种电脑硬件信息的方法。分享给大家供大家参考,具体如下:获取CPU编号:ManagementClass mc =
- 本文实例讲述了C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法。分享给大家供大家参考。具体如下:1.示例图P(x1,y1)以点A(a
- 实例描述现有某班学生的两份成绩,两份成绩中存在一些不一致的记录。需借助于编程方法找出这些不一致的记录。实例代码using System;us
- Android 消息队列模型详解及实例Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息
- C# 反射(Reflection)反射指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。
- 什么是TKMybatisTKMybatis 是基于Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKM
- 本文栈长教你如何在 Spring Boot 注册 Servlet、Filter、Listener。一、Spring Boot 注册Sprin
- 用一道选择题作为本文的开始吧! ArrayList list = new ArrayList(20);中的list扩充几次 A.0 B.1
- 本文实例讲述了Android编程实现ActionBar的home图标动画切换效果。分享给大家供大家参考,具体如下:Material Desi
- 在service层注入mapper时报空指针今天又遇到一个极其刁钻的问题,废话不多说先上代码,测试单元@RunWith(SpringRunn
- 本文实例讲述了java编程实现根据EXCEL列名求其索引的方法。分享给大家供大家参考,具体如下:原理:[a1-z26]*26^n-1 + [