Создание динамического идентификатора ExtJs при использовании Selenium Tool - PullRequest
0 голосов
/ 04 августа 2010

Я пытаюсь протестировать веб-приложение, пользовательский интерфейс которого разработан с использованием EXTJS.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь записать макрос и автоматизировать тест, у меня возникает одна серьезная проблема.

  1. ExtJs Идентификаторы являются динамическими (скажем, когда я записываю макрос впервыеИдентификатор extj-343 в следующий раз, когда я пытаюсь воспроизвести записанный макрос, идентификатор не остается прежним)

  2. Таким образом, я получаю исключение времени выполнения, и макрос не завершает выполнение.

Пробное решение:

Я попробовал iMacro, альтернативный инструмент тестирования для Selenium, и столкнулся с той же проблемой.

КакНасколько я понимаю, должен быть какой-то способ сделать эти идентификаторы статичными, чтобы проблема могла быть решена или должен быть доступен обходной путь.

Ответы [ 2 ]

0 голосов
/ 07 августа 2010

Если я правильно понимаю ваш вопрос, вам нужно только заменить изменяющуюся часть URL на ***** в вашем скрипте iMacros. Я не уверен, что такой же подход работает и в Selenium.

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 голосов
/ 04 августа 2010

Мы используем следующие переопределения для Ext (версия 2.2.1), чтобы получить идентификаторы, которые мы указываем вместо того, что генерирует Ext. Не уверен, где мы его нашли, вероятно, форумы 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);
}    
});
...