Задачка по Selenium + extJS


(d3unka) #1

Есть Web приложение с использованием extJS фреймворка. Хочется его автоматизировать при помощи Selenium.

Какие у кого есть наработки на эту тему?

 


(krainevsky) #2

Работать через скрипт.

1. Находим объект

2. Берём его id

3. Зовём Ext.getCmp(id) 

Проблема. id всегда генерятся динамически "ext-cmp-счётчик" для объектов. Наши разрабы строят формы ExtJS по некому общему описанию. В этих описаниях хранятся наши внутренние id. При создании формы они строят соответствия наши_внутренние_id - id_сгенерированне_extjs и хранят это внутри js-движка браузера. Соответственно мы стром тесты, опираясь на наши, статические id и в процессе прогона теста получаем нужные нам объекты. Про минусы того, что придётся работать через скриптовой движок думаю говорить не стоит - все знакомы.


(aspirin) #3

можно подробнее про "Зовём Ext.getCmp(id)"


(Nikita) #4

id - можно вычеслять с помощью jquery. Можно использовать, к примеру, класс елемента, если он уникален, функциональность jquery для локализации елемента. 

К примеру, нужно получить id елемента, который отображает индикатор загрузки. Заходим в консоль Chrome, либо FireBug, локализируем елемент и смотрим, какие у него есть классы.  К примеру, есть уникальный класс  

loading-img. В этом случае получение id будет выглядеть следующим образом:

window.$('.loading-img')[0].id

где 

window - это родительское окно,

. - указывает на то, что ищем по классу (если ищем по id, используется "#")

loading-img - уникальный класс елемента.

[0] - получаем DOM element

.id - получаем id елемента. 

Результатом будет строка, которая является id елемента.

Даллее можно указывать, как описано выше: Ext.getCmp(id).  Т.е. полная строка будет в виде: Ext.getCmp(window.$('.loading-img')[0].id).

Результатом вызова этого выражения в консоли будет Ext елемент. Развернув его (можно сделать в Chrom'e), можно проверить, какие у него есть свойства. Либо же, второй вариант, проверить документацию Sencha.

 

К примеру, нужно проверить свойство isVisible (не обязательно есть у каждого елемента). Тогда пишем: Ext.getCmp(window.$('.loading-img')[0].id).isVisible;

в тесте  конструкция selenium.getEval(Ext.getCmp(window.$('.loading-img')[0].id).isVisible) вернет строку "true" либо "false". Переводим в boolean и получаем флаг наличия елемента.

Таким же образом можно вызывать методы Ext элемента.