《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)

news2024/11/26 3:11:22

1.简介

上一篇文章中,从TestNg的特点我们知道支持变量,那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试。那么如何实现同时启动不同的浏览器对脚本进行测试,且听我娓娓道来。

2.项目实战

2.1创建一个TestNg class
1.首先按照上一篇的方法创建一个TestNg class,命名为:TestDiffBrowse(不需要勾选Beforeclass和Afterclass),如下图所示:


2.或者这样右键TestNG->Create TestNG Class,创建一个TestNg class,命名为:TestDiffBrowse(不需要勾选Beforeclass和Afterclass),如下图所示:

2.2代码设计

@Parmeters(“Browser”),直接把外部参数Browser通过@Parmaeters注释引入到测试脚本***方法共享这个变量.

2.3参考代码

package lessons;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

/**
 * @author 程序员二黑
 * 
 * @公众号:程序员二黑
 * 
 * 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 -下篇(详细教程) 
 *
 * 2022年2月25日
 */
public class TestDiffBrowse {
    @Test
    // 这行@Test一定要写,如果不写,表示当前没有需要执行的脚本,你可以测试不写,然后run testng.xml试试看,会发生什么
    @Parameters("Browser")
    public void startBrowser(String browser) {

        if (browser.equalsIgnoreCase("Firefox")) {

            System.setProperty("webdriver.gecko.driver",".\\Tools\\geckodriver.exe");
            WebDriver driver = new FirefoxDriver();
            driver.manage().window().maximize();
            driver.get("https://www.baidu.com");
            driver.quit();
        } else if (browser.equalsIgnoreCase("Chrome")) {

            System.setProperty("webdriver.chrome.driver",".\\Tools\\chromedriver.exe");
            WebDriver driver = new ChromeDriver();
            driver.manage().window().maximize();
            driver.get("https://www.baidu.com");
            driver.quit();
        }

    }
}

2.4创建testng.xml

1.创建一个testng.xml文件,设置参数Browser。右键上面我们创建的TestCrossBrowser.java,选择TestNG-Convert to TestNG,根据提示,走完这个向导。完成后,会在当前项目的根目录生成一个testng.xml的文件。如下图所示:


2.将生成的testng.xml文件进行调整和修改,内容如下:


3.参考代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<!-- Suite相关设置,这里paraller是执行的模式,有tests classes methods三种取值,thread-count表示两个线程执行用例 -->
<suite name="Suite" parallel="tests" thread-count="2">
  <test name="Test">
      <parameter name="Browser" value="Firefox" />
      <classes>
              <class name="lessons.TestDiffBrowser"/>
      </classes>
  </test> <!-- Test -->
  <test name="Test1">
      <parameter name="Browser" value="Chrome" />
      <classes>
              <class name="lessons.TestDiffBrowser"/>
      </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

这里需要注意每个test标签下的name不能重名,下面解释下parallel这个属性,上面提到有三种值。
(1)tests

TestNG 会在相同的线程中运行相同标记下的所有方法,但是每个下的方法会运行在不同的线程下。

应用:可以将非线程安全的类放在同一个标签下,并且使其可以利用TestNG多线程的特性的同时,让这些类运行在相同的线程中。(不太理解)

(2)methods

TestNG 会在不同的线程中运行测试方法,除非那些互相依赖的方法。那些相互依赖的方法会运行在同一个线程中,并且遵照其执行顺序。

(3)classes

TestNG 会在相同线程中相同类中的运行所有的方法,但是每个类都会用不同的线程运行

属性 thread-count 允许你为当前的执行指定可以运行的线程数量。

2.5运行代码

1.运行代码,右键Run AS->TestNG Suite,控制台输出,观察运行结果,在控制台输出地方可以看到运行了2个test。如下图所示:


2.运行代码后电脑端的浏览器的动作

3.小结

好了,时间也不早了,今天就分享和讲解到这里,希望对您有所帮助,感谢您耐心地阅读!

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

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

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

相关文章

深入工厂|高精密多层板是如何被智造出来的?

或许有很多人从网络上见过各种教程&#xff0c;告诉你单层板是什么&#xff0c;多层板是什么&#xff0c;他们该如何做出来&#xff0c;但是在具体制造时却全凭想象&#xff0c;今天&#xff0c;就让我们来实地看看&#xff0c;精密的多层板是如何被制造出来的&#xff01;今天…

大数据---zookeeper集群搭建

zookeeper集群搭建 跳过安装jdk的方法就是找到安装jdk环境的虚拟机克隆 克隆之后的虚拟机根据台数直接修改ip地址&#xff0c;重新配置免密登录&#xff0c;确保每台机器能够互相连接&#xff0c;然后安装zookeeper 文章目录zookeeper集群搭建前期工作服务器划分修改hostname设…

【java】Spring Boot -- Spring AOP原理及简单实现

文章目录一、AOP基本概念1.1、Filter、Interceptor、AOP1.2、AOP中的一些概念1).通知&#xff08;Advice&#xff09;: AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理&#xff1b;通知类型&#xff0c;主要有以下几种&#xff1a;2).连接点&#xff08;Jo…

Acwing---1246. 等差数列

等差数列1.题目2.基本思想3.代码实现1.题目 数学老师给小明出了一道等差数列求和的题目。 但是粗心的小明忘记了一部分的数列&#xff0c;只记得其中 N个整数。 现在给出这 N个整数&#xff0c;小明想知道包含这 N 个整数的最短的等差数列有几项&#xff1f; 输入格式 输入…

ChatGPT 接入微信,最强聊天机器人来了

最近的 ChatGPT 又再次火热起来了&#xff0c;各种周边工具也是层出不穷&#xff0c;今天我们就一起来做一个基于 ChatGPT 的微信聊天机器人&#xff0c;来感受 AI 世界的快乐吧~ 我们先来看几个我比较关心的问题吧 Python 语言算法 什么是 ChatGPT 人工智能会统治世界吗&a…

【Kubernetes】【二】环境搭建 环境初始化

本章节主要介绍如何搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类&#xff1a;一主多从和多主多从。 一主多从&#xff1a;一台Master节点和多台Node节点&#xff0c;搭建简单&#xff0c;但是有单机故障风险&#xff0c;适合用于测试环境多主…

带你玩转Jetson之Deepstream简明教程(四)DeepstreamApp如何使用以及用于工程验证。

1.DeepstreamApp是什么&#xff1f; 如果你安装完毕deepstream整体框架&#xff0c;会在你的系统执行目录内有可执行文件&#xff0c;文件名字是deepstream-app。这是一个可执行脚本文件&#xff0c;通过deepstream框架中的代码在安装的时候编译后install到系统根目录内。 此脚…

家政服务小程序实战教程11-首页跳转到分类页面

小程序的分类页面&#xff0c;通常会以侧边栏导航显示内容&#xff0c;我们使用了侧边选项卡和数据列表组件实现了分类展示的功能 还有个需求是从首页点击某个分类的时候&#xff0c;跳转到分类页时候需要选中对应的类别 01 增加页面参数 页面如果跳转时候需要这种接收参数并实…

JAVA和Spring的SPI机制讲解

文章目录1 SPI机制讲解1.1 引言1.2 Java SPI实现1.2.1 示例说明1.2.2 相关测试1.2.3 源码分析1.3 Spring SPI1.3.1 Spring 示例1.3.2 相关测试类1.3.3 源码分析1 SPI机制讲解 1.1 引言 SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制&#xff0c;可以用来启…

力扣337题 打家劫舍Ⅲ Java语言版

/**每个节点都用一个长度为2的数组来表示其状态,其中dp[0]表示偷该节点所得到的最多钱币,dp[1]表示不偷该节点所得到的最多钱币*/ class Solution {public int rob(TreeNode root) {int[] robRoot robTree(root);return Math.max(robRoot[0],robRoot[1]);}public int[] robTre…

rtp协议

RTP协议 在实时音视频通话中&#xff0c;我们通常使用 UDP 作为传输层协议&#xff0c;使用 RTP 协议包荷载音视频数据&#xff0c;RTP&#xff08;Real-time Transport Protocol&#xff09;是一种在 Internet 上传输多媒体数据的应用层协议&#xff0c;它通常建立在 UDP 之上…

RabbitMQ学习(五):RabbitMQ持久化

一、持久化概念在上一章内容中我们已经看到了如何处理任务不丢失的情况&#xff0c;但是如何保障当 RabbitMQ 服务停掉后消 息生产者发送过来的消息不丢失呢&#xff1f;默认情况下 RabbitMQ 退出或由于某种原因崩溃时&#xff0c;它将忽视队列 和消息&#xff0c;除非告知它不…

Python 考试练习题4

1. 将元组 (1,2,3) 和集合 {4,5,6} 合并成一个列表。 tup(1,2,3) set{4,5,6} listlist(tup)list(set) print(list) 2. 在列表 [1,2,3,4,5,6] 首尾分别添加整型元素 7 和 0。 #方法1 list[1,2,3,4,5,6] list.insert(0,7) #list.append(0) 这两种也可以 #list.insert(len(list…

PowerJob的server启动都经历了哪些?代码不多也很简单,咱们来逐一理解。

这是一篇让你受益匪浅的文章&#xff0c;点个关注交流一下吧~ PowerJob如何使用&#xff0c;官方文档已经说的很详细了&#xff0c;即使没学过计算机的人&#xff0c;按照那上面的步骤来也是可以搭建出一个可以使用的例子来&#xff0c;所以今天就不在这里重复前人的工作&#…

DataWhale 大数据处理技术组队学习task1

DataWhale 大数据处理技术组队学习task1 一、大数据概述 1. 大数据时代&#xff08;详细内容参考参考文章&#xff09; 2. 大数据的概念&#xff08;又或者是特点&#xff09; 4V 数据量大&#xff08;Volume&#xff09; 数据来源&#xff1a;可以是计算机、手机&#xff…

Linux 常用命令——【 2.查看程序端口占用及网络连接 netstat 命令】

文章目录1. netstat 简介2.命令格式&#xff1a;3. 命令参数&#xff1a;4. 常用命令1. netstat 简介 netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序&#xff0c;…

ACWING寒假每日一题python

ACWING寒假每日一题 一、孤独的照片 一个点一个点的来看&#xff0c;比如对于GHGHG中间的G&#xff0c;找到他的左边的G&#xff0c;以及右边的G的位置&#xff0c;l,r分别等于1&#xff0c;答案就要多加上11 但是如果对于 GHHGHHG 中间的G&#xff0c;我们可以看到l,r等于2&a…

【计算机网络期末复习】第六章 应用层

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为想复习学校计算机网络课程的同学提供重点大纲&#xff0c;帮助大家渡过期末考~ &#x1f4da;专栏地址&#xff1a; ❤️如果有收获的话&#xff0c;欢迎点…

Echarts 修改雷达图背景分割面,分割线颜色,设置数据线颜色

第016个点击查看专栏目录Echarts的雷达图背景可以是圆形的&#xff0c;也可以是多边形的&#xff0c;背景颜色&#xff0c;线条颜色都可以做个性化设置&#xff0c;这里是改变背景灰色&#xff0c;设置为浅红色。分割线也变成浅蓝色。同时数据线的颜色也变成了亮色。参考源代码…

【LeetCode】最大正方形 [M](动态规划)

221. 最大正方形 - 力扣&#xff08;LeetCode&#xff09; 一、题目 在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大正方形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0…