51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1301|回复: 1
打印 上一主题 下一主题

selenium 入门学习 (二)

[复制链接]
  • TA的每日心情
    无聊
    2024-9-27 10:07
  • 签到天数: 62 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2018-2-7 15:27:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
         一个百度登陆的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的注解;
          
          下面代码就是一个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. }
    复制代码

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 21:31 , Processed in 0.070410 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表