zoukankan      html  css  js  c++  java
  • 多个测试类 只使用同一个浏览器,同一个driver对象, 或者同一个页面的对象

    如果是:多个测试类 只使用同一个浏览器,同一个driver对象, 或者同一个页面的对象,
    只需要:
    1. 创建一个基本的测试类(BaseTest),具有一个公共静态的driver属性, public static WebDriver driver
    2. 给BaseTest类一个@Test(groups={"functionTests","checkinTests"})方法,
    3. BaseTest类中创建@beforeTest,@afterTest注解的方法, 不要创建@Test注解的方法,
    4. 其实,如果是PageObject设计模式,每个页面的对象创建也可以放在基础类BaseTest中,
    5. 其他的测试类继承这个基本的测试类BaseTest, 此时,所有的测试类就具有了一个共同的唯一的" driver ", 页面对象句柄。
    6. 给其他类中的方法也加上@Test(groups={"functionTests","checkinTests"})的注解,注解根据需要来设置。
    7. 当前也可以在其他类的类上声明@Test(groups={"functionTests","checkinTests"})注解。
    8. 如果某个测试类中有多个@Test注解的方法,则需要指定所有类中方法的执行顺序,而不是单个类中的,priority=0,开始
    9. 经过实验,发现每个测试类执行都是从默认的priority=0开始,
    如果只指定一个类中的测试方法的顺序,此时一起执行全部测试类时,不会按照类的顺序进行执行,而是会按照默认的priority来执行
    由于每个测试中的测试方法默认的priority=0,所以testng会先将priority=0的方法执行完毕后,才会执行priority=1,2,3...

    基础测试类

    @Test(groups={"functionTests","checkinTests"})
    public class BaseTest {
        public static WebDriver driver;
        
         @BeforeTest
         public void before(){
             System.setProperty("webdriver.chrome.driver", "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe");
             driver = new ChromeDriver();
             driver.manage().window().maximize();
             driver.get("https://www.sogou.com/");
         }
        
          @AfterTest
          public void after() throws Exception{
              Thread.sleep(2000);
              driver.close();
              driver.quit();
          }
    }

    测试类

    @Test(groups={"functionTests","checkinTests"})
    public class TEST2 extends BaseTest{
        
         @Test(priority=0)
        public void TWO1(){
            System.out.println("TWO1");
            driver.findElement(By.className("sec-input")).sendKeys("testTWO--1--");
            
        }
         @Test(priority=1)
        public void TWO2(){
            System.out.println("TWO2");
            driver.findElement(By.className("sec-input")).sendKeys("testTWO--2--");
            
        }
         @Test(priority=2)
        public void TWO3(){
            System.out.println("TWO3");
            driver.findElement(By.className("sec-input")).sendKeys("testTWO--3--");
            
        }
    }

    测试类

    public class TEST3 extends BaseTest{
    
        @Test(groups={"functionTests","checkinTests"},priority=3)
        public void THREE(){
            System.out.println("33333333333333333");
            driver.findElement(By.className("sec-input")).sendKeys("testTHREE----");
            
        }
    }

    测试类

    public class TEST4 extends BaseTest{
    
        @Test(groups={"functionTests","checkinTests"},priority=4)
        public void FOUR(){
            System.out.println("444444444");
            driver.findElement(By.className("sec-input")).sendKeys("testFOUR----");
            
        }
    }

    testng.xml文件配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite" parallel="classes" thread-count="1">
     
        <test verbose="10" preserve-order="true" name="TestDebug">  
            <groups>
                <run>
                  <exclude name="brokenTests" />
                  <include name="functionTests" />
                </run>
            </groups>
          
            <classes>
             <class name = "com.test.ztest.Test.TEST2"/>
               <class name = "com.test.ztest.Test.TEST3"/>
               <class name = "com.test.ztest.Test.TEST4"/>
                
            </classes>
    
        </test> <!-- Test -->
    </suite> <!-- Suite -->

    分享完成,如有更好的方法,请不令赐教。

  • 相关阅读:
    mysql修改登录密码三种方式
    python 面向对象类与类之间的关系
    python 初识函数
    python 编码
    MVC部门树的实现 http://www.ztree.me/v3/api.php
    事务能否对一个表进行如下操作:先删除后添加?
    添加注释时,该如何输入当前修改时间呢
    js代码折叠的方法//#region 代码 //#endregion
    echarts画折线图,柱状图,饼图
    方法中开启一个事务之后,能否调用另一个通过事务实现的函数?
  • 原文地址:https://www.cnblogs.com/xiaofeifei-wang/p/7400665.html
Copyright © 2011-2022 走看看