海鸥一飞 发表于 2018-2-7 15:27:24

selenium 入门学习 (二)

   一个百度登陆的UI实现:
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
    public static void main(String[] args) throws IOException {
      String driverPath = new File("./").getCanonicalPath() + "/src/main/resources/driver/chromedriver.exe";
      System.setProperty("webdriver.chrome.driver", driverPath);
      WebDriver webDriver = new ChromeDriver();
      webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
      webDriver.get("https://www.baidu.com/");
      webDriver.manage().window().maximize();
      //点击登陆按钮
      webDriver.findElement(By.xpath("//*[@id='u1']/a")).click();
      webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("用户名称");
      webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("用户密码");
      webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
      webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
      //在登录后界面查找用户名是否存在,获得用户名
      String username = webDriver.findElement(By.id("user-name")).getText();
      //判断是否一致,设置断言
      if (username.contains("用户名称")) {
            System.out.print(true);
      } else {
            System.out.print(false);
      }
      webDriver.close();
    }
}   码中存在的问题:

   测试类存在参数化问题:用户名,密码,验证码,定位的Xpath路径等;
   测试类只能使用一次,如果需要执行一些异常用例就需要重写;
   测试类对测试结果的判断,断言很难在执行后进行提取;
   测试类中存在一些异常场景没有进行考虑;
   针对上述问题引入testng测试框架:

   Eclipse安装testng 在网上有很多内容,这里就不叙述;安装完成testng后,在maven的pom.xml
文件引入testng包:

<dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.9.10</version>
</dependency>      testng包引入完成后,新建一个class文件,如下图 在输入 @Test后,通过ATL+ /显示出下图,选择Testng的注解;
      
      下面代码就是一个Testng框架的测试代码基础:

import org.testng.annotations.Test;
public class SeleniumTest1 {
    @Test
    public void test() {
    }
}      将百度UI实现webDriver代码放入到testng中:import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class SeleniumTest1 {
    @Test
    public void test() throws IOException {
      // 通过查找当前路径返回一个规范化路径,这样可以把工程放到不同地方执行了
      String driverPath = new File("./").getCanonicalPath() + "/src/main/resources/driver/chromedriver.exe";
      System.setProperty("webdriver.chrome.driver", driverPath);
      WebDriver webDriver = new ChromeDriver();
      webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
      webDriver.get("https://www.baidu.com/");
      webDriver.manage().window().maximize();
      webDriver.findElement(By.xpath("//*[@id='u1']/a")).click();
      webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("username");
      webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("password");
      webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
      webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
      String username = webDriver.findElement(By.id("user-name")).getText();
      if (username.contains("username")) {
            System.out.print(true);
      } else {
            System.out.print(false);
      }
      webDriver.close();
    }
}   优化一:代码结构:将测试业务代码和webdriver配置代码分离

import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class SeleniumTest1 {
    WebDriver webDriver;

    @BeforeMethod
    public void beforMethod() throws IOException {
      // 业务无关,启动配置相关代码
      String driverPath = new File("./").getCanonicalPath() + "/src/main/resources/driver/chromedriver.exe";
      System.setProperty("webdriver.chrome.driver", driverPath);
      webDriver = new ChromeDriver();
      webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    }

    @Test
    public void test() {
      webDriver.get("https://www.baidu.com/");
      webDriver.manage().window().maximize();
      webDriver.findElement(By.xpath("//*[@id='u1']/a")).click();
      webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("username");
      webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("password");
      webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
      webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
      String username = webDriver.findElement(By.id("user-name")).getText();
      if (username.contains("username")) {
            System.out.print(true);
      } else {
            System.out.print(false);
      }
    }

    @AfterMethod
    public void afterMethod() {
      // 业务无关代码
      webDriver.quit();
    }
}

梦想家 发表于 2018-5-14 16:53:03

:victory:
页: [1]
查看完整版本: selenium 入门学习 (二)