注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

Web自动化框架搭建【下】  

来自尘泥   2012-02-27 20:03:20|  分类: 自动化测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
居然超出博文长度限制==!只好分上下篇。

/**

     * 模拟Hover动作

     * @param locator

     * @note 暂时只支持ChromeDriver

     */

Selenium2.0本身就是原生提供mouseOver这个函数的。但是,至少在2.18.0,这个API还是一个废材。。。

    public void mouseOver(String locator) {

       pause();

       waitForElementPresent(locator);

      

以下这段代码似乎不是很灵光,优化进行中。。。

       // Hover

       WebElement we = BrowserCore.findElement(By.xpath(locator));

       Actions builder = new Actions(BrowserCore);

       builder.moveToElement(we).build().perform();

       return;

    }

   

    /**

     * Flash中点击元素

     * @param flashID     flash本身在网页中ID

     * @param targetName 目标元素在flashName

     */

关于Flash自动化,我将另开一文讲解(传送门:http://qa.blog.163.com/blog/static/19014700220121278928634/),里面会用到JS执行器。

    public void flexClick(String flashID, String targetName) {

    }

   

    /**

     * 获取Flash中元素左上角的(浏览器,非屏幕)坐标

     * @param flashID    flash本身在网页中ID

     * @param targetName 目标元素在flashName

     * @return           坐标[x,y]

     */

    public int[] flexGetPosition(String flashID, String targetName) {

    }

   

    /**

     * 设置BrowserEmulator各次操作之间的时间间隔,单位毫秒

     */

Selenium2.0原生提供setSpeed函数,用以控制用例执行速度,但是,至少至2.18.0,这个API还是个废材。。。只好自己实现一个。

基本上调试的时候会把步长设为500毫秒,真正运行时设为0毫秒。

    private void pause() {

此处使用万恶的Thread.sleep

}

 

从这里开始是几个元素定位和判断的函数,所谓用例自然要有判定,才有成功与失败之分,此处省略N行代码。。。

    /**

     * 页面元素定位

     * @param locator 暂时只支持xpath,后续考虑支持更多形式,如:idname

     */

    private void waitForElementPresent(final String locator) {

 

       int Timeout = Integer.parseInt(GlobalSettings.Timeout);

      

       try {

           new Wait() {

              public boolean until() {

                  return Browser.isElementPresent(locator);

              }

           }.wait("*** 页面元素(" + locator + ")定位失败 ***"Timeout);

       } catch (Exception e) {

           Assert.fail("*** 页面元素(" + locator + ")定位失败 ***");

           // TODO 更多自定义信息打印

       }

    }

 

再讲GlobalSettings

不说了,很短小

全局变量设置

 * @author 尘泥

 */

public class GlobalSettings {

    /**

     * 设置浏览器类型

     *     1   FireFox

     *     2   Chrome

     **/

    public static int BrowserCoreType = 2;

 

    public static String ChromeDriverPath = "res/chromedriver.exe";

   

    // BrowserEmulator各次操作之间的时间间隔,单位毫秒

    public static String StepInterval = "500";

   

    // BrowserEmulator等待超时时间,单位毫秒

    public static String Timeout = "30000";

   

}

 

最后是PageElement

对页面元素做了简单封装,可以使元素定位清晰一些。

用于页面元素定位

 * @author 尘泥

 */

public class PageElement {

 

    // 页面元素Xpath

    private String xpath = null;

    /**

     * 构造函数

     * @param tag 节点tag

     * @param attr    节点属性,如:id name class

     * @param value   属性值

     */

    public PageElement(String tag, String attr, String value) {

       this.xpath = "//" + tag + "[@" + attr + "='" + value + "']";

    }

 

    // 私有构造函数

    private PageElement(String xpath) {

       this.xpath = xpath;

    }

 

    /**

     * 加入子节点

     * @param tag 子节点tag

     * @param value   子节点属性

     * @param attr    属性值

     * @return    子节点

     */

    public PageElement nextNode(String tag, String value, String attr) {

       return new PageElement(this.xpath + "/" + tag + "[@" + attr + "='" + value + "']");

    }

 

    此处省略NnextNode函数的不同实现。

}

 

终章

除了框架核心代码以外,还提供了七八个demo用例,演示了一些写用例的惯用法。正如云风所说,学习语言就是学习它的惯用法,写用例也是一样。API仔仔细细看几眼就知道,怎么写出优质的用例来,才考验功夫。

 

目前UI自动化小组已有10名成员了,大家一起写用例,完善框架,哦也~

打完收工,吃煎包去。


  评论这张
 
阅读(2233)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016