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

Фотография

Нестандартные классы


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

#1 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 14 октября 2008 - 08:41

Коллеги, прошу помощи. В автоматизации не очень силен, и столкнулся с такой проблемой:
в продукте используются нестандартные классы окон.
TC 6.0 определяет его как Window("ATL:010DE7B0", "", 1)
Вопрос в следующем: как автоматизировать определение этого окна, если "010DE7B0" изменяется при каждой сборке продукта.
  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#2 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 14 октября 2008 - 09:16

попробуйте так

Window("ATL:*", "", 1)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#3 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 14 октября 2008 - 14:34

попробуйте так

Window("ATL:*", "", 1)


Я бы так и использовал, но дело в том что в этом же окне есть ещё объекты с таким же WndClass (ATL:...)
  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#4 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 14 октября 2008 - 14:49

попробуйте так

Window("ATL:*", "", 1)


Я бы так и использовал, но дело в том что в этом же окне есть ещё объекты с таким же WndClass (ATL:...)


есть три варианта:

1) используйте индекс контрола (единичка в вашем примере). Не очень удобно, так как может часто меняться от релиза к релизу

2) В некоторых случаях можно проследить зависимость. Например, у этого контрола могут меняться не все цифры, а только последние 4. И так же само у второго контрола. А первые 4 цифры будут уникальными для каждого из них. Например, одному контролу надо ставить "1234*", а второму "5432*". Я так когда-то справился с одним приложением.

3) Использовать * , но при этом искать не только по классу, а еще по нескольким свойствам, уникальным для данного конкретного контрола. Для этого вам придется использовать метод FindChild парент окна

вуаля?
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#5 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 14 октября 2008 - 15:14

попробуйте так

Window("ATL:*", "", 1)


Я бы так и использовал, но дело в том что в этом же окне есть ещё объекты с таким же WndClass (ATL:...)


есть три варианта:

1) используйте индекс контрола (единичка в вашем примере). Не очень удобно, так как может часто меняться от релиза к релизу

2) В некоторых случаях можно проследить зависимость. Например, у этого контрола могут меняться не все цифры, а только последние 4. И так же само у второго контрола. А первые 4 цифры будут уникальными для каждого из них. Например, одному контролу надо ставить "1234*", а второму "5432*". Я так когда-то справился с одним приложением.

3) Использовать * , но при этом искать не только по классу, а еще по нескольким свойствам, уникальным для данного конкретного контрола. Для этого вам придется использовать метод FindChild парент окна

вуаля?


Первые два пункта уже пробовал использовать. Они не подходят. Т.к. и индекс и класс постоянно меняются.
На счёт третьего варианта. то я пробовал Mapping. Вроде решил проблему, но есть и такие контролы у которых постоянно меняются все свойства от сборки к сборке.
  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#6 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 15 октября 2008 - 06:24

Здравствуйте.

Судя по всему, у вас VC++ приложение. У таких приложений (созданных в Visual Studio), все контролы, как правило, имеют уникальный идентификатор, который в TestComplete вы можете увидеть в свойстве ControlID объекта. Если это справедливо для вашего приложения, то смело можете использовать это свойство для идентификации объектов в вашем приложении (методы Find*, Name Mapping).
  • 0
С уважением,
Дмитрий

#7 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 15 октября 2008 - 07:41

Здравствуйте.

Судя по всему, у вас VC++ приложение. У таких приложений (созданных в Visual Studio), все контролы, как правило, имеют уникальный идентификатор, который в TestComplete вы можете увидеть в свойстве ControlID объекта. Если это справедливо для вашего приложения, то смело можете использовать это свойство для идентификации объектов в вашем приложении (методы Find*, Name Mapping).


ControlID меняется тоже постоянно.
Пробовал по другим свойствам контрола , таким как WndStyles, Width, Top, Height. В некоторых контролах помогало, но в основном и эти параметры меняются.
  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#8 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 15 октября 2008 - 10:27

Здравствуйте.

Если вам необходимо получить объект текущего активного окна, можете воспрользоваться свойствами Sys.Desktop.ActiveWindow или Sys.Desktop.FocusedWindow.
  • 0
С уважением,
Дмитрий

#9 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 15 октября 2008 - 10:41

Здравствуйте.

Если вам необходимо получить объект текущего активного окна, можете воспрользоваться свойствами Sys.Desktop.ActiveWindow или Sys.Desktop.FocusedWindow.

Дмитрий, Вы меня не поняли. У меня имеется окно. В нем есть некоторые объекты к которым я обращался к WndClass (ATL:...) Но так как от сборки к сборке WndClass меняется то мне нужно обратиться к этому объекту по каким то другим свойствам. Обращасля к свойствам WndStyles, Width, Top, Height. Но и они оказались не постоянными. Можно сказать что свойства этих объектов постоянно меняются от сборки к сборке. Вот в чем и вопрос: какими еще методами можно обратиться к этому объекту?
  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#10 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 15 октября 2008 - 11:26

Я думаю, что кроме вас никто не сможет дать более дельного совета. Так как только вы можете просмотреть все свойства и найти те из них, которые уникальны для данного контрола
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#11 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 15 октября 2008 - 11:30

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

Хотя нет, вот еще один способ (мне как-то весьма помог).

Даже если контрол время от времени смещается внутри окна и меняются его ширина/высота (т.е. к этим свойствам привязаться некак), можно использовать метод Sys.Desktop.ObjectFromPoint

Суть в том, что даже если контрол перемещают по форме, то все равно обычно есть некая точка, в которой всегда находится этот контрол (например, центр контрола). Попробуйте так, что ли
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#12 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 17 октября 2008 - 12:02

Спасибо всем за помощь. Проблему решили, за счет жесткого именования нестандартных объектов.
  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#13 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 17 октября 2008 - 12:22

Спасибо всем за помощь. Проблему решили, за счет жесткого именования нестандартных объектов.


а можно поподробнее? где именования?
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#14 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 18 октября 2008 - 11:07

Спасибо всем за помощь. Проблему решили, за счет жесткого именования нестандартных объектов.


а можно поподробнее? где именования?


Жесткое именование WndClass (ATL:010*). Но я поспешил. :friends: Проблема этим не решилась. Решилась немного другим. Для каждого объекта прописан индекс. А значит можно найти любой объект вот так: Window("ATL:*", "", 1)
  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#15 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 20 октября 2008 - 10:39

Здравствуйте.

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

Кстати, если разработчики смогут назначить Window Caption нужным вам окнам (через системную функцию SetWindowText), то вы сможете получать эти окна через соответствующий Caption: Window("ATL:*", "MyObjectWithCustomCaption").
  • 0
С уважением,
Дмитрий


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

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