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
0
投稿
猜你喜欢
- 今天给大家介绍下用Java swing开发一款音乐播放器, * 酷狗音乐播放器,完整源码地址在最下方,本文只列出部分源码,因为源码很多,全部贴
- 表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交造成的根本原因: 没有完整的进行一次,先请求表单页
- 优点1.装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点2.多层装饰比较
- 比如,我们有这么个过程,项目结构如下:a --b --ca是总结点,b是子节点,c是父节点b依赖父节点class,通
- 1、SpringBoot介绍SpringBoot本身就是为了简单、快速开发Spring框架项目而生的,在maven的基础上,对已有的mave
- 提到输入参数的基本验证(非空、长度、大小、格式…),在以前我们还是通过手写代码,各种if、else、StringUtils.isEmpty、
- 在Linux中创建一个新进程的唯一方法是使用fork()函数。fork()函数是Linux中一个非常重要的函数,和以往遇到的函数有一些区别,
- 前言.NET 生态越来越好,初学的朋友也越来越多。处理同一件简单的问题,随着我们知识的积累解决问题的方法也会越来越多。开始学习一门新的语言,
- 本文实例分析了C#中float的取值范围和精度。分享给大家供大家参考。具体分析如下:float类型的表现形式:默认情况下,赋值运算符右侧的实
- 泛型约束的意思就是说:类的泛型,只能是where字句后面所写的接口或类。这么说好像也有点不大明白,举个例子。我有一个接口,如下:
- 前言学会使用 API 文档是一个开发者基本的素养,而许多初学者并不会在意 API 文档的使用,甚至从来没有接触过,所以写下这篇文章探讨 AP
- 1.客户端代码public class UploadPicClient { public static void main(String[]
- 1、背景一般情况下,有些搜索需求是需要根据拼音和中文来搜索的,那么在elasticsearch中是如何来实现基于拼音来搜索的呢?可以通过el
- 可能也有其他方法,比如用 WGet 等等,但是 推荐用 PowerShell ,为什么呢,因为 PowerShell 太强大呗PowerSh
- 本文实例为大家分享了java实现鲜花销售系统的具体代码,供大家参考,具体内容如下一、练习目标1.体会数组的作用2.找到分层开发的感觉3.收获
- 方法的返回值为什么要有带返回值的方法呢?调用处拿到方法的结果之后,才能根据结果进行下一步操作带返回值方法的定义和调用:如果在调用处,要根据方
- java修改JFrame默认字体修改默认字体的方法很简单。首先我们随便写一个按钮出来:import javax.swing.*; publi
- 一、代码先上代码(以下这段代码会有多种执行结果)@Testpublic void test_interrupted_thread() thr
- 本文实例为大家分享了Android颜色渐变动画效果的实现代码,供大家参考,具体内容如下前言案例效果的实现比较简单,利用Android自带的颜
- 前言之前实现过《Android可签到的日历控件》的功能,跟这篇一样都是实现签到打卡功能,这篇实现的是按月进行打卡做标识,本篇内容实现的按周进