zoukankan      html  css  js  c++  java
  • 3_Selenium+TestNG

    1 Eclipse中TestNG插件安装

      路径:Help->Install New Software,插件地址:http://beust.com/eclipse

    2 新建TestNG Class

    3 TestNG代码重构

    •  代码编写
    package com.selenium.test;
    
    import java.sql.Driver;
    import java.util.List;
    import java.util.Set;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    import org.testng.annotations.Test;
    
    public class Test3 {
        
        WebDriver driver = null;
        
          @Test
          public void login1() throws InterruptedException {
              
                driver = new FirefoxDriver();    //启动火狐浏览器
                driver.manage().window().maximize();    //最大化浏览器
                driver.navigate().to("http://www.baidu.com/");    //导航到百度
            
            //登录 - 链接
            WebElement linkLogin = driver.findElement(By.xpath("//div[@id='u1']/a[text()='登录']"));
            linkLogin.click();
            
            //等待2秒
            Thread.sleep(3000);
            
            //用户名、密码 - 输入框
            WebElement textUsername = driver.findElement(By.xpath("//input[@id='TANGRAM__PSP_8__userName']"));
            textUsername.clear();
            textUsername.sendKeys("栗子测试");
            WebElement textPassword = driver.findElement(By.xpath("//input[@id='TANGRAM__PSP_8__password']"));
            textPassword.clear();
            textPassword.sendKeys("2472471982");
            
            //登录 - 按钮
            WebElement buttonLogin = driver.findElement(By.xpath("//input[@id='TANGRAM__PSP_8__submit']"));
            buttonLogin.click();
            
            //等待3秒
            Thread.sleep(3000);
          }
          
        @Test
        public void basicInfo1() throws InterruptedException {
            //悬停
            Actions action = new Actions(driver); 
            WebElement linkMe = driver.findElement(By.xpath("//a[@id='s_username_top']/span"));
            action.moveToElement(linkMe).perform();
            
            //账号设置 - 链接
            WebElement linkSeniorSearch = driver.findElement(By.xpath("//div[@id='s_user_name_menu']/div/a[3]"));
            linkSeniorSearch.click();
            
            //账号设置 - 窗口跳转
            String firstWindowHandle = driver.getWindowHandle();    //获取第一个窗口句柄
            Set<String> towHandles = driver.getWindowHandles();
            for (String handle : towHandles) {    //遍历所有窗口句柄
                System.out.println("+++" + handle); 
                driver.switchTo().window(handle);    //切换两次,切换到第二个窗口
            }
            
            //修改资料 - 链接
            WebElement linkModifyData = driver.findElement(By.xpath("//div[@id='content']//a[text()='修改资料']"));
            linkModifyData.click();
            
            //修改资料 - 窗口跳转
            Set<String> threeHandles = driver.getWindowHandles();    //获取三个窗口句柄
            threeHandles.removeAll(towHandles);        //移除原来的两个句柄
            String thirdWindowHandle = threeHandles.iterator().next();    //剩下一个句柄
            driver.switchTo().window(thirdWindowHandle);    //切换到第三个窗口
            
            //性别 - 单选(被看做一组)
            List<WebElement> radiosGender = driver.findElements(By.xpath("//input[@name='passport_sex']"));    //定位所有单选按钮
            radiosGender.get(1).click();    //index从0开始
            
            //血型 - 此下拉框非Select,只是样式像
            WebElement divBlood= driver.findElement(By.xpath("//div[@id='cussel1000002']/div"));    
            divBlood.click();
            WebElement linkBlood= driver.findElement(By.xpath("//div[@id='cussel1000002']//a[text()='AB']"));    
            linkBlood.click();
            
            //保存 - 按钮
            WebElement buttonSaveBasic = driver.findElement(By.xpath("//form[@id='profile']/child::input2"));
            buttonSaveBasic.click();
            driver.quit();
        }
      
    }
    •  XML文件 - 1 
    <?xml version="1.0" encoding="UTF-8"?>
    <!--suite:定义一个测试套件,可包含多个测试用例或测试group-->
    <suite name="BaiduSuite"  thread-count="1">
        <test name="bd_updateInfo">
            <classes>
              <!-- 第一个类中需要执行的测试方法 -->>
                <class name="com.selenium.test.Test3" >
                    <methods>
                        <include name="login1" />
                        <include name="basicInfo1" />
                    </methods>
                </class>
                <!-- 第二个类中需要执行的测试方法 -->>
                <class name="com.selenium.test.Test4" >
                    <methods>
                        <include name="login2" />
                        <include name="basicInfo2" />
                    </methods>
                </class>
            </classes>
        </test>
    </suite>

     4 TestNG方法依赖

    • 代码编写
    public class Test5 {
          @BeforeClass //将执行Test之前需要准备的内容卸载@BeforeClass中,如:初始化WebDriver,链接数据库等等

        public void beforeClass() {
              System.out.println("beforeClass");
          }
        
          @Test
          public void login3() throws InterruptedException {
              
              System.out.println("login3");
          }
          
          @Test(dependsOnMethods={ "login3" }) //依赖login3方法,如果login3失败,则basicInfo3方法跳过
          public void basicInfo3() throws InterruptedException {
              
              System.out.println("basicInfo3");
          }
          
          @AfterClass
          public void afterClass() {
              
              System.out.println("afterClass");
          }
    }
    • XML文件 - 2
    <?xml version="1.0" encoding="UTF-8"?>
    <suite name="BaiduSuite"  thread-count="1">
    
        <test name="bd_updateInfo">
            <classes>
                <class name="com.selenium.test.Test5" />
            </classes>
        </test>
    </suite>

     5 TestNG参数化

    • 代码编写
    package com.selenium.test;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    public class Test6 {
        
        @DataProvider(name="loginData")
        public Object[][] loginData(){
            return new Object[][]{
               {"栗子测试","http://www.cnblogs.com/lizitest/"},
               {"QQ", "2472471982"}
            };
        }
        
          @Test(dataProvider="loginData")
          public void login(String username,String password) {
              System.out.println(username + "  " + password);
          }
    }
    • XML文件 - 3
    <?xml version="1.0" encoding="UTF-8"?>
    <suite name="Suite" verbose="1" parallel="false" thread-count="1">
        <test name="TestDataProvider">
            <packages>
                <package name="com.selenium.test2" />
            </packages>
        </test>
    </suite>

     6 TestNG监听

    • 代码编写
    package com.selenium.test2;
    
    import org.testng.Assert;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Listeners;
    import org.testng.annotations.Test;
    import com.selenium.util.Listener;
    
      @Listeners({Listener.class})
    public class Test8{
    
      @DataProvider
      public Object[][] dataInfo(){
          
          return new Object[][]{{10}};
      }
      
      @Test
      public void test1() {
          
          System.out.println("1===========");
          Assert.assertEquals(5, 1);
          
      }
      
      @Test(dependsOnMethods = "test1",dataProvider = "dataInfo")
      public void test2(int info){
          
          System.out.println("2==============");
          Assert.assertEquals(info, 10);
      }
      
      @Test
      public void test3(){
          
          System.out.println("3");
          Assert.assertEquals(100, 100);
      }
      
    }
    • 监听类
    package com.selenium.util;
    
    import org.testng.ITestResult;
    import org.testng.TestListenerAdapter;
    
    public class Listener extends TestListenerAdapter{
        
        @Override
        public void onTestFailure(ITestResult result){
            
            super.onTestFailure(result);
            System.out.println(result.getName() + "监控结果===============失败!");
            
        }
        
         @Override
            public void onTestSkipped(ITestResult result) {
                 
                 super.onTestSkipped(result);
                 System.out.println(result.getName() + "监控结果===============跳过!");
             
            }
         
         @Override
            public void onTestSuccess(ITestResult result) {
             
                 super.onTestSuccess(result);
                 System.out.println(result.getName() + "监控结果===============成功!");
             
            }
    
    }
    • XML文件 - 4
    <?xml version="1.0" encoding="UTF-8"?>
    <suite name="BaiduSuite" >
    
        <listeners>
           <listener class-name="com.selenium.util.Listener" />
         </listeners>
    
        <test name="bd_updateInfo" >
            <classes>
                <class name="com.selenium.test2.Test8" />
            </classes>
        </test>
    </suite>
    栗子测试

    • 所有文章均为原创,是栗子测试所有人员智慧的结晶,如有转载请标明出处
    • 如果您在阅读之后觉得有所收获,请点击右下角推荐
    • QQ:2472471982,欢迎大家前来咨询和探讨(暗号:栗子测试)

  • 相关阅读:
    信号处理引发的cpu高
    两个混淆的用户锁定
    一段获取权限的脚本
    AF_INET 和PF_INET区别;AF_LOCAL PF_LOCAL 区别.
    一个三目运算符问题
    nginx cpu高排查
    mmap 测试的一些坑
    哈希——布隆过滤器 查黑名单(大数据 100亿数据)
    哈希——设计RandomPool结构
    哈希
  • 原文地址:https://www.cnblogs.com/lizitest/p/5136459.html
Copyright © 2011-2022 走看看