Нестандартные классы
#1
Отправлено 14 октября 2008 - 08:41
в продукте используются нестандартные классы окон.
TC 6.0 определяет его как Window("ATL:010DE7B0", "", 1)
Вопрос в следующем: как автоматизировать определение этого окна, если "010DE7B0" изменяется при каждой сборке продукта.
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#2
Отправлено 14 октября 2008 - 09:16
Window("ATL:*", "", 1)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#3
Отправлено 14 октября 2008 - 14:34
попробуйте так
Window("ATL:*", "", 1)
Я бы так и использовал, но дело в том что в этом же окне есть ещё объекты с таким же WndClass (ATL:...)
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#4
Отправлено 14 октября 2008 - 14:49
попробуйте так
Window("ATL:*", "", 1)
Я бы так и использовал, но дело в том что в этом же окне есть ещё объекты с таким же WndClass (ATL:...)
есть три варианта:
1) используйте индекс контрола (единичка в вашем примере). Не очень удобно, так как может часто меняться от релиза к релизу
2) В некоторых случаях можно проследить зависимость. Например, у этого контрола могут меняться не все цифры, а только последние 4. И так же само у второго контрола. А первые 4 цифры будут уникальными для каждого из них. Например, одному контролу надо ставить "1234*", а второму "5432*". Я так когда-то справился с одним приложением.
3) Использовать * , но при этом искать не только по классу, а еще по нескольким свойствам, уникальным для данного конкретного контрола. Для этого вам придется использовать метод FindChild парент окна
вуаля?
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#5
Отправлено 14 октября 2008 - 15:14
попробуйте так
Window("ATL:*", "", 1)
Я бы так и использовал, но дело в том что в этом же окне есть ещё объекты с таким же WndClass (ATL:...)
есть три варианта:
1) используйте индекс контрола (единичка в вашем примере). Не очень удобно, так как может часто меняться от релиза к релизу
2) В некоторых случаях можно проследить зависимость. Например, у этого контрола могут меняться не все цифры, а только последние 4. И так же само у второго контрола. А первые 4 цифры будут уникальными для каждого из них. Например, одному контролу надо ставить "1234*", а второму "5432*". Я так когда-то справился с одним приложением.
3) Использовать * , но при этом искать не только по классу, а еще по нескольким свойствам, уникальным для данного конкретного контрола. Для этого вам придется использовать метод FindChild парент окна
вуаля?
Первые два пункта уже пробовал использовать. Они не подходят. Т.к. и индекс и класс постоянно меняются.
На счёт третьего варианта. то я пробовал Mapping. Вроде решил проблему, но есть и такие контролы у которых постоянно меняются все свойства от сборки к сборке.
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#6
Отправлено 15 октября 2008 - 06:24
Судя по всему, у вас VC++ приложение. У таких приложений (созданных в Visual Studio), все контролы, как правило, имеют уникальный идентификатор, который в TestComplete вы можете увидеть в свойстве ControlID объекта. Если это справедливо для вашего приложения, то смело можете использовать это свойство для идентификации объектов в вашем приложении (методы Find*, Name Mapping).
Дмитрий
#7
Отправлено 15 октября 2008 - 07:41
Здравствуйте.
Судя по всему, у вас VC++ приложение. У таких приложений (созданных в Visual Studio), все контролы, как правило, имеют уникальный идентификатор, который в TestComplete вы можете увидеть в свойстве ControlID объекта. Если это справедливо для вашего приложения, то смело можете использовать это свойство для идентификации объектов в вашем приложении (методы Find*, Name Mapping).
ControlID меняется тоже постоянно.
Пробовал по другим свойствам контрола , таким как WndStyles, Width, Top, Height. В некоторых контролах помогало, но в основном и эти параметры меняются.
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#8
Отправлено 15 октября 2008 - 10:27
Если вам необходимо получить объект текущего активного окна, можете воспрользоваться свойствами Sys.Desktop.ActiveWindow или Sys.Desktop.FocusedWindow.
Дмитрий
#9
Отправлено 15 октября 2008 - 10:41
Дмитрий, Вы меня не поняли. У меня имеется окно. В нем есть некоторые объекты к которым я обращался к WndClass (ATL:...) Но так как от сборки к сборке WndClass меняется то мне нужно обратиться к этому объекту по каким то другим свойствам. Обращасля к свойствам WndStyles, Width, Top, Height. Но и они оказались не постоянными. Можно сказать что свойства этих объектов постоянно меняются от сборки к сборке. Вот в чем и вопрос: какими еще методами можно обратиться к этому объекту?Здравствуйте.
Если вам необходимо получить объект текущего активного окна, можете воспрользоваться свойствами Sys.Desktop.ActiveWindow или Sys.Desktop.FocusedWindow.
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#10
Отправлено 15 октября 2008 - 11:26
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#11
Отправлено 15 октября 2008 - 11:30
Хотя нет, вот еще один способ (мне как-то весьма помог).Я думаю, что кроме вас никто не сможет дать более дельного совета. Так как только вы можете просмотреть все свойства и найти те из них, которые уникальны для данного контрола
Даже если контрол время от времени смещается внутри окна и меняются его ширина/высота (т.е. к этим свойствам привязаться некак), можно использовать метод Sys.Desktop.ObjectFromPoint
Суть в том, что даже если контрол перемещают по форме, то все равно обычно есть некая точка, в которой всегда находится этот контрол (например, центр контрола). Попробуйте так, что ли
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#12
Отправлено 17 октября 2008 - 12:02
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#13
Отправлено 17 октября 2008 - 12:22
Спасибо всем за помощь. Проблему решили, за счет жесткого именования нестандартных объектов.
а можно поподробнее? где именования?
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#14
Отправлено 18 октября 2008 - 11:07
Спасибо всем за помощь. Проблему решили, за счет жесткого именования нестандартных объектов.
а можно поподробнее? где именования?
Жесткое именование WndClass (ATL:010*). Но я поспешил. Проблема этим не решилась. Решилась немного другим. Для каждого объекта прописан индекс. А значит можно найти любой объект вот так: Window("ATL:*", "", 1)
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#15
Отправлено 20 октября 2008 - 10:39
Я понял вас, я предложил вариант как получить ссылку на текущее окно не имея возможности обратиться к нему по имени напрямую из-за незнания этого имени.
Кстати, если разработчики смогут назначить Window Caption нужным вам окнам (через системную функцию SetWindowText), то вы сможете получать эти окна через соответствующий Caption: Window("ATL:*", "MyObjectWithCustomCaption").
Дмитрий
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных