51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【好消息】企业内训服务上线啦!项目为王,自动化测试提升加速器 !横扫BAT,Python全栈测试开发技能大全
【第123期】:入行2年多测试如何渡过职业迷茫期?参与调查问卷 缔造行业趋势 月薪15K+的测试开发必备技能? 【活动】为视频UP主打CALL,互动领福利!
查看: 16044|回复: 10

Selenium+webdriver数据驱动

[复制链接]

该用户从未签到

发表于 2013-8-2 17:13:33 | 显示全部楼层 |阅读模式
我用testng自带的数据驱动功能做参数化,发现这种方法也很方便,但是数据要写在代码中,不免有点不好维护,于是我继承FeedTest这个类,然后把数据写入到Excel,直接读Excel,发现脚本和数据分离,而且
也不需要用JAVA写读取Excel的代码,相当方便,两个代码如下:
用Testng自带的做参数化:

public class testSchoolRoom {
        public WebDriver driver;
        public String baseUrl = "http://wuhan.eduyun.cn";
        public String LinkTest;
        public String LinkTestPassWord;

        public void startUrl() throws Exception {
                driver = new FirefoxDriver();
                driver.get(baseUrl);
                // driver.manage().window().maximize();
        }
       
        @DataProvider(name = "testData")
        public Object[][] testNetHomeWrok_data() {
                return new Object[][] { { "300522624", "1234", "f","密码长度在6-20之间" },
                                { "300522624", "123456789","f","密码输入有误" },
                                { "300522624", "1234qwer", "t","王丽娟的工作空间" }};
        }


        @Test(dataProvider = "testData")
        public void testTcShortPasswordLg(String userName, String passWord,String flag,
                        String excepted) throws Exception {
                startUrl();
                driver.findElement(By.id("info_username")).clear();
                driver.findElement(By.id("info_username")).sendKeys(userName);
                driver.findElement(By.id("info_password")).clear();
                driver.findElement(By.id("info_password")).sendKeys(passWord);
                driver.findElement(By.id("info_submit")).click();
                if(flag == "t"){
                          LinkTest =  driver.findElement(By.xpath("//li[contains(concat(' ', @class, ' '), ' jykj_blue ')]//strong")).getText().trim();
                                assertEquals(excepted, LinkTest);
                                LinkTest = null;
                                Thread.sleep(2000);
                               
                }else{
                        LinkTest = driver.findElement(By.xpath("//p[contains(concat(' ', @class, ' '), ' warnmsg ')] "))
                                .getText().trim();
                        assertEquals(excepted, LinkTest);
                        LinkTest = null;
                        Thread.sleep(2000);
               
          }
                driver.quit();
        }  
}

用读取Excel的方式 :
import org.testng.annotations.Test;
import org.testng.annotations.BeforeSuite;
import static org.testng.AssertJUnit.assertEquals;
import java.io.File;
import java.util.Vector;

import org.databene.benerator.anno.Source;
import org.databene.feed4testng.FeedTest;
import org.junit.AfterClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.opera.core.systems.scope.protos.ExecProtos.ActionList.Action;

public class testSchoolRoom extends FeedTest {
       
        public WebDriver driver;
        private String LinkTest;
        public String baseUrl = "http://wuhan.eduyun.cn";
       
        public void startUrl() throws Exception {
                driver = new FirefoxDriver();
                driver.get(baseUrl);
                // driver.manage().window().maximize();
        }

        @Test(dataProvider = "feeder")
        @Source("test.xls")
        public void testTcShortPasswordLg(String userName, String passWord,boolean flag,
                        String excepted) throws Exception {
                startUrl();
                driver.findElement(By.id("info_username")).clear();
                driver.findElement(By.id("info_username")).sendKeys(userName);
                driver.findElement(By.id("info_password")).clear();
                driver.findElement(By.id("info_password")).sendKeys(passWord);
                driver.findElement(By.id("info_submit")).click();

                if(flag){
                          LinkTest =  driver.findElement(By.xpath("//li[contains(concat(' ', @class, ' '), ' jykj_blue ')]//strong")).getText().trim();
                                assertEquals(excepted, LinkTest);
                                LinkTest = null;
                                Thread.sleep(2000);
                               
                }else{
                        LinkTest = driver.findElement(By.xpath("//p[contains(concat(' ', @class, ' '), ' warnmsg ')] "))
                                .getText().trim();
                        assertEquals(excepted, LinkTest);
                        LinkTest = null;
                        Thread.sleep(2000);
               
          }
                driver.quit();
        }  
}
不过,下面一种 方式需要导入Feed4testng相关的包
回复

使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    发表于 2013-8-5 13:46:45 | 显示全部楼层
    不是还有其他方法么?把参数什么的都放在property文件中,然后用ResourceBundle.getBundle方法去调
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2013-8-6 10:38:47 | 显示全部楼层
    回复 2# joykao


        是的,方法很多,但是用Excel还是比较好维护,还有直接用JAVA调用Excel也行
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    发表于 2013-8-6 23:14:58 | 显示全部楼层
    回复 3# woshidileiwopa

    有点意思
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-8-21 15:58:49 | 显示全部楼层
    Junit直接自带关键字驱动(更高级的数据驱动)功能,何必这么麻烦???当然这种傻事我也干过~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-11-5 10:38:51 | 显示全部楼层
    你好,我是新手,公司的程序是C#写的。现在我想用selenium进行自动化测试。测试脚本用C#是不是最好?可是我在网上找不到C#编程语言编写selenium测试的教程,多数都是java或phthyon的教程,十分迷茫呀!

    我在想对用C#开发的软件如果用selenium进行自动化测试用java或者Python编程可不可以?如果 可以 的话 是不是 我搭建了java的环境,为了被测程序我还得搭建.net环境吗???可以兼容吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-11-15 17:36:21 | 显示全部楼层
    我的为什么报空指针错误 当运行到driver.……的时候
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-7-12 20:40
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    发表于 2013-12-21 18:05:24 | 显示全部楼层
    学习了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-1-20 20:00:42 | 显示全部楼层
    问一下,excel文件 要放在那个地方 我放在项目的根目录下,读取不了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2016-1-26 13:17:34 | 显示全部楼层
    durongxuan11 发表于 2015-1-20 20:00
    问一下,excel文件 要放在那个地方 我放在项目的根目录下,读取不了

    根目录啊,如果读取不了,可以在@source中指定路径
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-11-26 10:12
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    发表于 2016-5-11 14:53:07 | 显示全部楼层
    "不过,下面一种 方式需要导入Feed4testng相关的包"   请问,相关的包有哪些,一直报错少包
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2021-12-1 07:40 , Processed in 0.073030 second(s), 35 queries .

    Powered by Discuz! X3.2

    © 2001-2021 Comsenz Inc.

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