借鉴ASP.NET的控件模型辅助UI自动化测试

发表于:2012-5-31 10:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:余昭辉    来源:51Testing软件测试网采编

  在这里getQuery是一个非常重要的方法,这在后面会介绍。

public abstract class CompositeControl extends Control {
    protected List <Control> children;


    public CompositeControl(WebDriver webDriver) {
        super(webDriver);
        children = new ArrayList<Control> ();
    }


    public void addChild(Control control) {
        this.children.add(control);
        control.parent = this;
    }
}

  所有的可以包含其他控件的类型都从CompositeControl派生,包括Page。比如下面的Window就是这类元素:

public class Window extends CompositeControl {
    private String title;


    public Window(String title,WebDriver webDriver) {
        super(webDriver);
        this.title = title;
    }


    @Override
    public String getQuery(){
        return String.format("Ext.ComponentQuery.query(\"window[title='%s']\")[0]",title);
    }
}

  下面是一个基本控件Button的封装:

public class Button extends Control {
    private String text;


    public Button(String text, WebDriver webDriver) {
        super(webDriver);
        this.text = text;
    }


    @Override
    public String getQuery() {
        return this.parent.getQuery() + String.format(".query(\"button[text='%s']\")[0]", text);
    }


    public void click() {
        webDriver.findElement(By.id(getId())).click();
    }
}

  ExtJS提供了一个query接口,我们可以利用这个接口传入一些查询表达式查询到页面上的Ext控件,而这里的getQuery就是每个控件的查询表达式吧。因为页面上的ExtJS控件是层次的,所以我们可以利用这种嵌套关系进行精确的定位。

  好了,来看看我们的登陆页面如何封装吧:

public class LoginPage extends ExtJSPage{
     public LoginPage(WebDriver webDriver){
          super(webDriver);
     }


     private TextBox txtUserName;
     private TextBox txtPassword;
     private Button btnLogin;
    
     @Override
     protected void init(){
          txtUserName = new TextBox("userName", webDriver);
          txtPassword = new TextBox("password", webDriver);
          btnLogin = new Button("登录", webDriver);


          Window win = new Window("登陆", webDriver);
          win.addChild(txtUserName);
          win.addChild(txtPassword);
          win.addChild(btnLogin);


          this.addChild(win);
     }


     public void login(String userName, String password){
          txtUserName.setValue(userName);
          txtPassword.setValue(password);
          btnLogin.click();
     }
}

  上面的TextBox和ExtJSPage没有提供代码,都很简单可以自行进行封装一下(熟悉ASP.NET的同学可能对这里代码有点眼熟)。

  按照这种思路,只要我们封装好所有的基本ExtJS控件,对于所有的页面我们剩下的工作就是组装的工作了。在完成这些之后,我甚至发现使用ExtJS的应用比那些没有使用ExtJS的应用更容易进行测试。在这里我们只需要完善我们的基本控件封装就可以让我们的测试更佳稳固,而对于编写测试的人来说只需要集中精力关注Test case。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号