2010-08-04 2 views
0

EXTJS를 사용하여 UI가 개발 된 웹 응용 프로그램을 테스트하려고합니다. 내가 직면 한 문제는 매크로를 기록하고 테스트를 자동화하려고 할 때 큰 문제가 하나 있다는 것입니다.Selenium Tool을 사용할 때 ExtJs 동적 ID 생성

  • (나는 이드 동일하게 유지하지 않는 기록 된 매크로를 재생하려고하면 나는 이드입니다 extj-343 다음 번 매크로를 기록 할 때 처음 말)

    1. 는 ExtJS ID는 동적 그래서 런타임 예외가 발생하고 매크로 실행을 완료하지 않습니다.

    해결 시도 :

    나는 iMacro에게 셀레늄에 대한 대체 시험 도구를 시도하고 같은 문제에 직면했다.

    제 생각에는 문제가 해결 될 수 있거나 사용 가능한 해결 방법이 있어야하므로이 ID를 정적으로 만드는 방법이 있어야합니다.

  • 답변

    0

    Ext가 생성하는 ID 대신 우리가 지정하는 ID가되도록 Ext (버전 2.2.1)에 대해 다음과 같은 재정의를 사용합니다. 우리가 어디서 발견했는지, 아마 Ext 포럼.

    Ext.override(Ext.Button, { 
    initButtonEl : function(btn, btnEl){ 
        this.el = btn; 
        btn.addClass("x-btn"); 
    
        if(this.id){ 
         //this.el.dom.id = this.el.id = this.id; 
         // override 
         btnEl.dom.id = btnEl.id = this.id; 
         // end override 
        } 
        if(this.icon){ 
         btnEl.setStyle('background-image', 'url(' +this.icon +')'); 
        } 
        if(this.iconCls){ 
         btnEl.addClass(this.iconCls); 
         if(!this.cls){ 
          btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon'); 
         } 
        } 
        if(this.tabIndex !== undefined){ 
         btnEl.dom.tabIndex = this.tabIndex; 
        } 
        if(this.tooltip){ 
         if(typeof this.tooltip == 'object'){ 
          Ext.QuickTips.register(Ext.apply({ 
         target: btnEl.id 
        }, this.tooltip)); 
        } else { 
        btnEl.dom[this.tooltipType] = this.tooltip; 
        } 
        } 
    
        if(this.pressed){ 
        this.el.addClass("x-btn-pressed"); 
        } 
    
        if(this.handleMouseEvents){ 
        btn.on("mouseover", this.onMouseOver, this); 
        // new functionality for monitoring on the document level 
        //btn.on("mouseout", this.onMouseOut, this); 
        btn.on("mousedown", this.onMouseDown, this); 
        } 
    
        if(this.menu){ 
        this.menu.on("show", this.onMenuShow, this); 
        this.menu.on("hide", this.onMenuHide, this); 
        } 
    
        if(this.repeat){ 
        var repeater = new Ext.util.ClickRepeater(btn, 
        typeof this.repeat == "object" ? this.repeat : {} 
        ); 
        repeater.on("click", this.onClick, this); 
        } 
    
        btn.on(this.clickEvent, this.onClick, this); 
    } 
    }); 
    Ext.override(Ext.menu.Item, { 
    onRender : function(container, position){ 
        var el = document.createElement("a"); 
        el.hideFocus = true; 
        el.unselectable = "on"; 
        el.href = this.href || "#"; 
        if(this.hrefTarget){ 
         el.target = this.hrefTarget; 
        } 
        el.className = this.itemCls + (this.menu ? " x-menu-item-arrow" : "") + (this.cls ? " " + this.cls : ""); 
        // override 
        if (this.id){ 
         el.id = this.id; 
        } 
        // end override 
        el.innerHTML = String.format(
          '<img src="{0}" class="x-menu-item-icon {2}" />{1}', 
          this.icon || Ext.BLANK_IMAGE_URL, this.itemText||this.text, this.iconCls || ''); 
        this.el = el; 
        Ext.menu.Item.superclass.onRender.call(this, container, position); 
    }  
    }); 
    
    0

    정확하게 질문하는 경우 iMacros 스크립트에서 변경되는 URL 부분을 *****로 바꾸면됩니다. 같은 접근법이 Selenium에서 작동하는지 확실하지 않습니다. 수작업의 너무 많은 의미 100 화면이있을 수 있기 때문에 URL 부분을 변경

    http://wiki.imacros.net/FAQ#Q:_A_link_changes_every_time_I_visit_the_web_page_.28.22session_ID.22.29.2C_how_can_I_replay_the_macro_without_error.3F

    +0

    쓰기 옵션이 아닙니다 .. 그래서이 솔루션이 채택되는 경우 테스트를 자동화 아무 문제가 없다. 우리는 수동 테스팅을 할 수 있습니다. 다른 간단한 작업이 있어야합니다 ... 답변을 얻으려면 여기에 반드시 게시하십시오 .... –