51Testing软件测试论坛

标题: selenium 入门学习 (二) [打印本页]

作者: 海鸥一飞    时间: 2018-2-7 15:27
标题: selenium 入门学习 (二)
     一个百度登陆的UI实现:
  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.util.concurrent.TimeUnit;
  4. import org.openqa.selenium.By;
  5. import org.openqa.selenium.WebDriver;
  6. import org.openqa.selenium.chrome.ChromeDriver;
  7. public class SeleniumTest {
  8.     public static void main(String[] args) throws IOException {
  9.         String driverPath = new File("./").getCanonicalPath() + "/src/main/resources/driver/chromedriver.exe";
  10.         System.setProperty("webdriver.chrome.driver", driverPath);
  11.         WebDriver webDriver = new ChromeDriver();
  12.         webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
  13.         webDriver.get("https://www.baidu.com/");
  14.         webDriver.manage().window().maximize();
  15.         //点击登陆按钮
  16.         webDriver.findElement(By.xpath("//*[@id='u1']/a[7]")).click();
  17.         webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("用户名称");
  18.         webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("用户密码");
  19.         webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
  20.         webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
  21.         //在登录后界面查找用户名是否存在,获得用户名
  22.         String username = webDriver.findElement(By.id("user-name")).getText();
  23.         //判断是否一致,设置断言
  24.         if (username.contains("用户名称")) {
  25.             System.out.print(true);
  26.         } else {
  27.             System.out.print(false);
  28.         }
  29.         webDriver.close();
  30.     }
  31. }
复制代码
    码中存在的问题:

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

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

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

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

  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.util.concurrent.TimeUnit;
  4. import org.openqa.selenium.By;
  5. import org.openqa.selenium.WebDriver;
  6. import org.openqa.selenium.chrome.ChromeDriver;
  7. import org.testng.annotations.AfterMethod;
  8. import org.testng.annotations.BeforeMethod;
  9. import org.testng.annotations.Test;
  10. public class SeleniumTest1 {
  11.     WebDriver webDriver;

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

  20.     @Test
  21.     public void test() {
  22.         webDriver.get("https://www.baidu.com/");
  23.         webDriver.manage().window().maximize();
  24.         webDriver.findElement(By.xpath("//*[@id='u1']/a[7]")).click();
  25.         webDriver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys("username");
  26.         webDriver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys("password");
  27.         webDriver.findElement(By.id("TANGRAM__PSP_10__verifyCode")).sendKeys("验证码");
  28.         webDriver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
  29.         String username = webDriver.findElement(By.id("user-name")).getText();
  30.         if (username.contains("username")) {
  31.             System.out.print(true);
  32.         } else {
  33.             System.out.print(false);
  34.         }
  35.     }

  36.     @AfterMethod
  37.     public void afterMethod() {
  38.         // 业务无关代码
  39.         webDriver.quit();
  40.     }
  41. }
复制代码


作者: 梦想家    时间: 2018-5-14 16:53





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2