Selenium + UI Map

45 views
Skip to first unread message

Ievhen Sobko

unread,
Nov 8, 2010, 10:56:40 AM11/8/10
to Agile Testing
Всем привет!

Кто-нибудь имеет опыт использования UI Map с Selenium?
Есть несколько инпутов с такими айди ext-comp-1025, ext-comp-1026
(тоесть они постоянно генерятся).
Нужно получить максимальное айди конкретных елементов которых на
странице несколько.
Код ниже в Firefox выдает то что надо а вот в UI Map нет.
Я с UI Map не могу достучатся к JS document. Может кто-то встречал
что-то такое...

Приблизительный пример:
ppMap.addElement('reportsPage', {
name : 'trendingSelectContainer',
description : 'Trending reports select report type combobox input
field',
getLocator : function() {
allInput = document.getElementsByTagName('input');
regExp = /(\d+)$/;
indexIds = [];
for (var i=0; i<allInput.length; i++) {
inp = allInput[i];
if (inp.parentNode == null) {
continue;
}
grandParent = inp.parentNode.parentNode;
if (grandParent.className.indexOf('prevent_round_combobox')!=-1) {
founded = regExp.exec(inp.id);
if (founded != null) {
indexIds.push(founded[1]);
}
}
}
return 'ext-comp-' + Math.max.apply( Math, indexIds );
}
});

Mikalai Alimenkou

unread,
Nov 8, 2010, 11:25:38 AM11/8/10
to Agile Testing
Я бы не советовал использовать такую сильную привязку к внутреннему
алгоритму генерации идентификаторов и все-таки постарался найти какой-
то другой признак нужного элемента (класс, заголовок, родительский
элемент и так далее). Возможно если он расположен последним (так как
интересует максимальный идентификатор), то стоит поэкспериментировать
с :last-child селекторами.

Если же все таки никак не получится обойти это ограничение, то я бы
советовал переделать код так чтобы метод getLocator брал идентификатор
из параметра, а само вычисление максимального параметра перенести в
метод getDefaultValues для аргумента. Просто у меня нету уверенности
что в getLocator есть доступ к правильному документу. Должно
получиться что-то такое:

getDefaultValues: function(inDocument) {
allInput = inDocument.getElementsByTagName('input');


regExp = /(\d+)$/;
indexIds = [];
for (var i=0; i<allInput.length; i++) {
inp = allInput[i];
if (inp.parentNode == null) {
continue;
}
grandParent = inp.parentNode.parentNode;
if
(grandParent.className.indexOf('prevent_round_combobox')!=-1) {
founded = regExp.exec(inp.id);
if (founded != null) {
indexIds.push(founded[1]);
}
}
}

return [Math.max.apply(Math, indexIds)];
}

И еще думаю стоит подумать над упрощением JavaScript кода. :)

COTOHA /\/\

unread,
Nov 8, 2010, 11:44:54 AM11/8/10
to acceptanc...@googlegroups.com
а я бы ещё советовал поговорить с программистами, чтобы они вам оставляли в нужном элементе какой-нить маркер (тот же класс) - это просто, а вам вместо регэкспов нужен будет простой селектор по классу.
(простановку маркера в правильном месте можно проверить простым юнит-тестом, это немножко усложнит программу, но сильно упростит тест)

обеспечение testability - обязанности программиста, так что не думаю, что они будут сильно против вам помочь.

2010/11/8 Mikalai Alimenkou <lumii.su...@gmail.com>
ext-comp-1025



--
...dali bude...

Mikalai Alimenkou

unread,
Nov 8, 2010, 2:25:08 PM11/8/10
to Agile Testing
Классный совет! Я полностью согласен. Это и есть семантическая
верстка, достаточно иметь классы на ключевых элементах, чтобы легко
находить другие. А для упрощения можно использовать команду assignId.
Она позволит избежать множественных сложных селекторов.

On Nov 8, 6:44 pm, "COTOHA /\\/\\" <sergiy.movc...@gmail.com> wrote:
> а я бы ещё советовал поговорить с программистами, чтобы они вам оставляли в
> нужном элементе какой-нить маркер (тот же класс) - это просто, а вам вместо
> регэкспов нужен будет простой селектор по классу.
> (простановку маркера в правильном месте можно проверить простым юнит-тестом,
> это немножко усложнит программу, но сильно упростит тест)
>
> обеспечение testability - обязанности программиста, так что не думаю, что
> они будут сильно против вам помочь.
>

> 2010/11/8 Mikalai Alimenkou <lumii.subscri...@gmail.com>
>
> > ext-comp-1025
>
> --
> ...dali bude...

Reply all
Reply to author
Forward
0 new messages