51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3440|回复: 2
打印 上一主题 下一主题

【佳乐Selenium】DAY-8 分层

[复制链接]
  • TA的每日心情
    开心
    2024-10-4 10:34
  • 签到天数: 1208 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2015-3-3 16:03:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    加班什么的最无聊了,尤其是形式主义的加班~~

    反正闲着 就补补小日记吧

    其实这个工作用了2天,而且是整整的两天

    在做了2个模块 就感觉到必须要分层啦

    小何老师给我讲了一下 要分
    Test层:存放测试脚本
    Page层:存放测试页面
    Tools层:存放其他辅助测试的 (暂不考虑)
    Logic层:逻辑脚本

    这个过程很痛苦,有多苦只有自己能知道

    业务场景:登录-申请任务-查询任务-选择任务-审核任务-退出

    改善前:
    一、页面和逻辑杂在一起
    二、写了1个大方法 testng跑出来的结果只有一个,并不是按着上面的几个环节,逐个环节判断测试结果
    三、每个class都传入driver参数,其实driver只用一次

    改善后:
    一、先把WebElement 声明出来 下面在调用,如果页面变动 只需维护上面的部分 不用从逻辑代码里找需要修改哪里
    二、重构脚本 复用了链接里面的父类Page和父类TestCase
    TestCase 根据需要进行调整

            public static void setDriver(){

                /* 设定 chrome webdirver 的位置 */
                System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");

                /* 启动 chrome 浏览器 */
                driver = new ChromeDriver();

                /* 浏览器最大化 */
                driver.manage().window().maximize();
            }

    还要理解一下testNG的执行顺序
    在TestNG里面 使用 dependsOnMethods


    三、终于明白static 的意思了 之前背书的时候死记着 用static关键字声明的,那么属于类的属性和方法永远只在内存中存在一份,
    实际用了才知道因为没加static导致driver的空指针问题,这辈子都记住了

    http://www.myext.cn/other/a_20273.html


    贴一小段的代码

    ====================为每一个页面做一个Page====================

    /**
    *首页
    */
    public class HomePage extends Page {
    /**
    *URL常量,很少用到,一般在起始页用,有时放到配置文件里去统一管理
    */
    private static final String URL="http://*";


    public HomePage init(){
        DriverManager.getDriver().get(URL);
        return this;
    }

    //用户名
    @FindBy(name="j_username")
    private WebElement yonghuming;
    //密码
    @FindBy(name="j_password")
    private WebElement mima;

    //登录按钮
    @FindBy(xpath="//*[@id='form1']/div[4]/button")
    private WebElement denglu;


    public void login (String username,String password)

    {
        //用户名
        yonghuming.sendKeys(username);

        //密码
        mima.sendKeys(password);

        //登录按钮
        denglu.click();
    }


    //注销按钮
    @FindBy(className="logout")
    private WebElement logout;

    public void logout(){

        //注销
        logout.click();   

        DriverManager.quitDriver();

    }

    }
    ====================testNG====================

    public class testApplyTask extends TestCase{

        @Test
        public void login() {

            HomePage home = new HomePage();      
            home.init();
            home.login("用户名","密码");
        }

        @Test(dependsOnMethods = { "login" })
        public void applyTask() {

            ApplyTaskPage action=new ApplyTaskPage();      
            action.ApplyTask(“任务名称”);        
        }  
    }
    ====================testNG XML====================


      <test name="testApplyTask" preserve-order="true">
        <classes>
          <class name="com.testNG.testApplyTask"/>
               <methods>
                  <include name="login" />  
                  <include name="applyTask" />
                  <include name="logout" />

                </methods>  
        </classes>
      </test>




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

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-14 13:16
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    2#
    发表于 2015-3-13 08:23:01 | 只看该作者
    请问 Logic层:逻辑脚本 这里的逻辑脚本指的是什么? 或者说逻辑脚本与Test层的测试脚本有什么不同
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2018-8-10 10:12:54 | 只看该作者
    整体的学习思路目前看起来是对的,不过关于分层的描述还是太粗略,建议跟我一样的初学者们参考这篇资料:
    Page Factory Based Selenium Automation Framework
    https://www.codeproject.com/Arti ... utomation-Framework
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-23 09:49 , Processed in 0.064943 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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