Window cannot be set active
#1
Отправлено 05 апреля 2006 - 09:14
Может быть кто-нить подскажет из-за чего возникает эта ошибка в SetActive и как с этим бороться.
У меня такая ошибка возникает периодически.
#2
Отправлено 05 апреля 2006 - 09:40
для корректной работы с ним надо подключать экстеншены дотнетовские в силктесте
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#3
Отправлено 05 апреля 2006 - 12:55
Вообще-то это может быть например, когда выскачил боксик с сообщением и не пускает на активизацию родительского окна.
#4
Отправлено 05 апреля 2006 - 13:00
Вообще-то это может быть например, когда выскачил боксик с сообщением и не пускает на активизацию родительского окна.
ну вообще-то я этот случай не рассматривал, как тривиальный :)
хотя, возможно, я не прав, и всё идеальное - просто :)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#5
Отправлено 05 апреля 2006 - 13:29
#6
Отправлено 05 апреля 2006 - 13:33
дочернее окно... хм... короче, если в Record -> Window Declaration класс окна определяется как ChildWin , значит оно дочернее
если это браузер и падение скрипта происходит на попытке активировать такое окно, значит это скорее всего сам браузер - это дот нет приложение (читай выше как бороться)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#7
Отправлено 05 апреля 2006 - 13:42
#8
Отправлено 05 апреля 2006 - 13:52
Правильно будет задействовать
Browser.SetActive()
Browser - это главное окно броузера (универсальное)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#9
Отправлено 05 апреля 2006 - 13:56
BrowserChild - это дочернее окно. Его нельзя так активировать.
Правильно будет задействовать
Browser.SetActive()
Browser - это главное окно броузера (универсальное)
кстати, писал это не я, а KaNoN, я ему ссылку дал и его восприняло как меня :)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#10
Отправлено 05 апреля 2006 - 13:57
Да, нездоровая штука какая вышлакстати, писал это не я, а KaNoN, я ему ссылку дал и его восприняло как меня :)
#11
Отправлено 05 апреля 2006 - 14:23
а если на экране открыто несколько окон в браузере, или я не знаю есть ли там другие друие окна кроме моего, а я хочу активировать именно нужное мне окно. Тогда что?
#12
Отправлено 05 апреля 2006 - 15:18
Есть несколько вариантов:а если на экране открыто несколько окон в браузере, или я не знаю есть ли там другие друие окна кроме моего, а я хочу активировать именно нужное мне окно. Тогда что?
1) Обеспечить работу скрипта так, чтобы было только одно окно броузера. Это достигается использованием appstate и прочей функциональности, которая может очистить экран от ненужных окон
2) Перебрать все окна броузера и посмотреть, в каком из них есть нужная страница. Для этого понадобится функциональность для определения количества открытых окон эксплорера, имея которую мы в цикле можем перебирать все нужные окна до тех пор, пока не найдем нужное
3)У данной страницы может быть специфический заголовок, по которому к данному окну можно обратиться так:
Допустим у нас нужная страница имеет заголовок My Title , тогда активируем главное окно следующей командой:
[ ]MainWin("My Title").SetActive()
Вот примерно так можно построить решение данной проблемы.
#13
Отправлено 05 апреля 2006 - 17:01
[+] window MainWin MultiBrowser [ ] netscape6_DOM tag "$netscape6_DOM[1]|$netscape6_DOM[2]" [ ] netscape7_DOM tag "$netscape7_DOM[1]|$netscape7_DOM[2]" [ ] explorer6_DOM tag "$explorer6_DOM[1]|$explorer6_DOM[2]" [+] winclass MultiBrowserChild:BrowserChild [ ] parent MultiBrowser
Можно его и дальше улучшать, но мне пока хватает
И нармально ищет обьекты даже если у вас есть несколько открытых окон Browser.
#14
Отправлено 05 апреля 2006 - 17:10
А если открыто с десяток таких окон и после нужного окна были активизированы минимум 2 окна? Вот тут вряд ли. Более того есть не только окно Browser, но и Browser2, что позволяет обращаться к активному окну и к тому окну, которое было активно до этого. Фактически эта запись объединила эти 2 окна. Так что такая запись может и убавит проблем, но для этого нужно еще дополнительно гарантировать, что число окон броузера будет не более некоторого порогового.Можно его и дальше улучшать, но мне пока хватает
И нармально ищет обьекты даже если у вас есть несколько открытых окон Browser.
#15
Отправлено 05 апреля 2006 - 17:32
Я имею ввиду что можно использовать такой подход, что бы избавить себя от цикла поиска по существующим окнам - пусть за тебя это будет делать Силк Тест.
При необходимости поиска окна с более сложной структорой, вполне возможно что даный подход не будет эффективен и можно будет использовать цикл. Но согласись, обычно бывает открыто один - два бровзера. И на верхнем уровне они имеют простую структуру тагов.
#16
Отправлено 05 апреля 2006 - 17:44
Увы, это тоже частное решение. Причем для случая, когда нужно активизировать одно из 2-х последних активированных окон броузера.Я предложил общую концепцию, а не частное решение.
Он и так все за нас делает. Тем более, что я предлагал это сделать на уровне функциональности. Тут беда в том, что нужно выбирать между громоздкой декларацией окна и нестабильной функциональностью (а все случаи поведения окон предсказать трудно)Я имею ввиду что можно использовать такой подход, что бы избавить себя от цикла поиска по существующим окнам - пусть за тебя это будет делать Силк Тест.
Там придется. И это очень накладно. Например, мне нужно было позакрывать все окна броузеров. А у меня там были и модальные окна. Стандартными функциями это сделать не получилось, так как некоторые окна не содержали нужных элементов. Пришлось активировать все Browser окна и нажимать на них Alt-F4. Вот только тогда удалось сделать общую функцию для закрытияПри необходимости поиска окна с более сложной структорой, вполне возможно что даный подход не будет эффективен и можно будет использовать цикл.
окон броузера. Но это для закрытия, а в других задачах нужно еще и за исключениями хорошенько проследить
Ну, это зависит от приложения, но действительно можно стараться сводить количество активных окон броузера к минимуму. В поддержку твоего утверждения я могу напомнить, что неспроста к окну Browser прицепили напарника Browser2. Но стоит появиться еще одному окну (а это может быть какое-нить модальное окно броузера), то тут надо хитрить.Но согласись, обычно бывает открыто один - два бровзера. И на верхнем уровне они имеют простую структуру тагов.
#17
Отправлено 06 апреля 2006 - 06:39
Кажется, проблема решена.
Простите мне мою дотошность, но мне хочется понять почему нельзя активировать BrowserChild окно используя SetActive(). Согласно силковскому хелпу метод SetActive ( ) прописан для класса BrowserChild.
SetActive method (BrowserChild)
Class
BrowserChild
Action
Makes active the browser window that contains the BrowserChild. "Browser window" can refer to Browser, a ChildWin, a DialogBox, or any other MoveableWin.
Syntax
BrowserChild.SetActive ( )
Notes
Typically you call this method when a page in your Web application brings up another window and you want to restore focus to the Web page itself.
Example
BrowserPage.SetActive ()
#18
Отправлено 06 апреля 2006 - 07:47
Я постоянно использую как BrowserChild.SetActive ( ) так и BrowserPage.SetActive () - работает нормально.
.... ну конечно бывают проблемы если я по ремоуту пытаюсь активировать - не всегда срабатывает а на локальном компе вроде проблем не было.
#19
Отправлено 06 апреля 2006 - 09:11
Я тоже сталкивался с тем, что нужно было активировать нужную страницу и SetActive не хотел работать. Вопрос в том, где эти настройки хранятся и что именно там настраивать.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных