Перейти к содержимому

Фотография

DevExpress контролы


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 5482788

5482788

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Петр

Отправлено 03 января 2010 - 17:37

Всех с прошедшим! )
Selenium RC + C# + NUnit

Попался в руки проект, написанный с использованием DevExpress'a
Встала проблема с календариком DevExpress - пример Календарика
Как выбрать дату? или нажать "Today", "Clear"?
Попытался записать Selenium IDE - скрипт при воспроизведении не работает (

P.S. в данном примере календаря дату можно указать вручную, но для нашего проекта это не подходит - ввод залочен.
  • 0

#2 5482788

5482788

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Петр

Отправлено 03 января 2010 - 17:53

Второй вопрос:
Есть такой Грид
Как дождаться его обновления?
  • 0

#3 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 03 января 2010 - 19:33

Всех с прошедшим! )
Selenium RC + C# + NUnit

Попался в руки проект, написанный с использованием DevExpress'a
Встала проблема с календариком DevExpress - пример Календарика
Как выбрать дату? или нажать "Today", "Clear"?

Ну, для кнопок можно попробовать XPath. В данном примере я бы привязался к тексту и классу. То есть, локатор берется как-то так:

//td[@class='dx' and text()='Clear']

Чтобы более удобно было смотреть внутренности, я рекомендую поставить плагин к ФФ Firebug. Тогда вы сможете увидеть, как реально в ХТМЛ представлен необходимый объект.

С выбором чисел чуть посложнее. Тут надо параллельно расчитывать какие ссылки вообще отображаются (то есть какие дни доступны). И если такой календарь один, то со ссылкой с числом можно работать как с локатором по тексту ссылки, например:

link=21

Попытался записать Selenium IDE - скрипт при воспроизведении не работает (

Возможно, ИДЕ тупит или скрипт не дожидается появления нужного объекта. Также, высока вероятность, что тот же локатор по XPath не обнаружит объект, если его вложенность слишком высока.
  • 0

#4 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 03 января 2010 - 19:40

Второй вопрос:
Есть такой Грид
Как дождаться его обновления?

С гридом есть 2 зацепки:
1) Иконка Loading появляется и исчезает. Правда, в примере подгрузка происходит слишком быстро и я не успел поймать данный объект, но если данных будет много, то высока вероятность того, что данный значок будет висеть долго. По-крайней мере достаточно, чтобы его засечь. Как только вы сможете подобрать локатор к нему, вам надо будет дописать 2 метода, которые будут ждать появления и исчезновения объекта, переданного локатором, причем время ожидания - один из параметров. После этого вы используете эти методы в связке. И даже если загрузка пройдет слишком быстро, что мы даже не успеем засечь появление иконки загрузки, то уж факт, что иконка исчезла, будет выявлен и факт завершения загрузки мы отловим.

2) У сслыки на текущуу страницу пропадает обработчик события onclick. Если мы контролируем номер текущей страницы или просто знаем, на какую страницу мы попадем, то нам достаточно ждать исчезновения ссылки на страницу с заданным атрибутом onclick и заданным номером.
  • 0

#5 5482788

5482788

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Петр

Отправлено 03 января 2010 - 21:30

Спасибо, KaNoN
FireBug у меня есть :)
По первому вопросу оказалось что просто метод Click() не работает...пришлось использовать ClickAt(). это нормально? :drinks:

По второму вопросу с гридом немного не понял...
Два метода: первый проверяет что элемент появился, а второй что он исчез и в обоих будет таймаут, верно? То есть в методах будет некий цикл и проверка IsElementPresent()?
как понял по сути чтото похожее реализовано в методе селениума WaitForCondition(), но я так и не монял как его применять.

2) У сслыки на текущуу страницу пропадает обработчик события onclick. Если мы контролируем номер текущей страницы или просто знаем, на какую страницу мы попадем, то нам достаточно ждать исчезновения ссылки на страницу с заданным атрибутом onclick и заданным номером.


Вот к примеру с гридом. Линк "2" на вторую страницу грида имеет вид:
<td style="cursor: pointer;" onclick="aspxGVPagerOnClick('ctl00_PlaceHolderMain_ASPxGridView1','PN1');" class="dxpPageNumber_Aqua">2</td>
после клика на него элемент превращается в:
<td class="dxpPageNumber_Aqua dxpCurrentPageNumber_Aqua">2</td>

Как мне по человечески дождаться этого преобразования? :)
  • 0

#6 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 03 января 2010 - 23:57

Спасибо, KaNoN
FireBug у меня есть :)
По первому вопросу оказалось что просто метод Click() не работает...пришлось использовать ClickAt(). это нормально? :crazy:

В-общем, ненормально. Но это неважно, если всё работает :crazy: Так что, по этому поводу можете не париться. :drinks:

По второму вопросу с гридом немного не понял...
Два метода: первый проверяет что элемент появился, а второй что он исчез и в обоих будет таймаут, верно? То есть в методах будет некий цикл и проверка IsElementPresent()?

Что-то типа того.

как понял по сути чтото похожее реализовано в методе селениума WaitForCondition(), но я так и не монял как его применять.

Этот метод использует вызов Javascript snippet-a. Мутноватая вещь. поэтому я обычно делаю функцию-обертку, в которой в цикле делается нужная проверка. Хотя, конечно, надо бы и этот метод колупнуть, тем более, что в документации примеры работы с этим методом были.

2) У сслыки на текущуу страницу пропадает обработчик события onclick. Если мы контролируем номер текущей страницы или просто знаем, на какую страницу мы попадем, то нам достаточно ждать исчезновения ссылки на страницу с заданным атрибутом onclick и заданным номером.


Вот к примеру с гридом. Линк "2" на вторую страницу грида имеет вид:
<td style="cursor: pointer;" onclick="aspxGVPagerOnClick('ctl00_PlaceHolderMain_ASPxGridView1','PN1');" class="dxpPageNumber_Aqua">2</td>
после клика на него элемент превращается в:
<td class="dxpPageNumber_Aqua dxpCurrentPageNumber_Aqua">2</td>

Как мне по человечески дождаться этого преобразования? :)

Получается, задача сводится к 2-м шагам:
1) Дождаться, пока исчезнет элемент
//td[@onclick="aspxGVPagerOnClick('ctl00_PlaceHolderMain_ASPxGridView1','PN1');" and text()='2']

(тут надо проследить, чтоб кавычки правильно маскировались)

2) Дождаться появления элемента

//td[@class='dxpPageNumber_Aqua dxpCurrentPageNumber_Aqua' and text()='2']

Вот как-то так.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных