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

Фотография

Window cannot be set active


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

#1 Pet

Pet

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

  • Members
  • Pip
  • 9 сообщений

Отправлено 05 апреля 2006 - 09:14

Привет всем!

Может быть кто-нить подскажет из-за чего возникает эта ошибка в SetActive и как с этим бороться.
У меня такая ошибка возникает периодически.
  • 0

#2 Genka

Genka

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

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


Отправлено 05 апреля 2006 - 09:40

если такое возникает с дочерними окнами (Child Window), то, скорее всего, тестируемое приложение - .NET-приложение
для корректной работы с ним надо подключать экстеншены дотнетовские в силктесте
  • 0

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

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

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


#3 VegaX

VegaX

    Активный участник

  • Members
  • PipPip
  • 85 сообщений

Отправлено 05 апреля 2006 - 12:55

А в ручную оно может быть установлено как активное?
Вообще-то это может быть например, когда выскачил боксик с сообщением и не пускает на активизацию родительского окна.
  • 0

#4 Genka

Genka

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

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


Отправлено 05 апреля 2006 - 13:00

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


ну вообще-то я этот случай не рассматривал, как тривиальный :)
хотя, возможно, я не прав, и всё идеальное - просто :)
  • 0

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

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

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


#5 Pet

Pet

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

  • Members
  • Pip
  • 9 сообщений

Отправлено 05 апреля 2006 - 13:29

а что понимать под дочерним окном? В любом случае все мои окна являются дочерними окнами браузера. А ошибка возникает, например, в таком случае wPage.SetActive(). И нет там никакого боксика.
  • 0

#6 Genka

Genka

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

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


Отправлено 05 апреля 2006 - 13:33

какого браузера?

дочернее окно... хм... короче, если в Record -> Window Declaration класс окна определяется как ChildWin , значит оно дочернее

если это браузер и падение скрипта происходит на попытке активировать такое окно, значит это скорее всего сам браузер - это дот нет приложение (читай выше как бороться)
  • 0

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

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

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


#7 Pet

Pet

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

  • Members
  • Pip
  • 9 сообщений

Отправлено 05 апреля 2006 - 13:42

браузер - Internet Explorer, а мое окно имеет класс BrowserChild.
  • 0

#8 Genka

Genka

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

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


Отправлено 05 апреля 2006 - 13:52

BrowserChild - это дочернее окно. Его нельзя так активировать.
Правильно будет задействовать
Browser.SetActive()

Browser - это главное окно броузера (универсальное)
  • 0

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

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

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


#9 Genka

Genka

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

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


Отправлено 05 апреля 2006 - 13:56

BrowserChild - это дочернее окно. Его нельзя так активировать.
Правильно будет задействовать
Browser.SetActive()

Browser - это главное окно броузера (универсальное)


кстати, писал это не я, а KaNoN, я ему ссылку дал и его восприняло как меня :)
  • 0

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

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

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


#10 KaNoN

KaNoN

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

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

Отправлено 05 апреля 2006 - 13:57

А уже если нужно активировать одну какую-то страницу из нескольких открытых, то там нужно поиграться с Browser-окном. Но SetActive для веб-приложений делается только для главного окна!!!

кстати, писал это не я, а KaNoN, я ему ссылку дал и его восприняло как меня :)

Да, нездоровая штука какая вышла :acute:
  • 0

#11 Pet

Pet

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

  • Members
  • Pip
  • 9 сообщений

Отправлено 05 апреля 2006 - 14:23

KaNoN, спасибо попробую.

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

#12 KaNoN

KaNoN

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

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

Отправлено 05 апреля 2006 - 15:18

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

Есть несколько вариантов:
1) Обеспечить работу скрипта так, чтобы было только одно окно броузера. Это достигается использованием appstate и прочей функциональности, которая может очистить экран от ненужных окон
2) Перебрать все окна броузера и посмотреть, в каком из них есть нужная страница. Для этого понадобится функциональность для определения количества открытых окон эксплорера, имея которую мы в цикле можем перебирать все нужные окна до тех пор, пока не найдем нужное
3)У данной страницы может быть специфический заголовок, по которому к данному окну можно обратиться так:
Допустим у нас нужная страница имеет заголовок My Title , тогда активируем главное окно следующей командой:
[ ]MainWin("My Title").SetActive()

Вот примерно так можно построить решение данной проблемы.
  • 0

#13 VegaX

VegaX

    Активный участник

  • Members
  • PipPip
  • 85 сообщений

Отправлено 05 апреля 2006 - 17:01

Лично я переписал обьявление главного окна Browser и BrowserChild, немного подправив стандартное обьявления:

[+] 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

Можно его и дальше улучшать, но мне пока хватает :dirol:
И нармально ищет обьекты даже если у вас есть несколько открытых окон Browser.
  • 0

#14 KaNoN

KaNoN

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

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

Отправлено 05 апреля 2006 - 17:10

Можно его и дальше улучшать, но мне пока хватает 
И нармально ищет обьекты даже если у вас есть несколько открытых окон Browser.

А если открыто с десяток таких окон и после нужного окна были активизированы минимум 2 окна? Вот тут вряд ли. Более того есть не только окно Browser, но и Browser2, что позволяет обращаться к активному окну и к тому окну, которое было активно до этого. Фактически эта запись объединила эти 2 окна. Так что такая запись может и убавит проблем, но для этого нужно еще дополнительно гарантировать, что число окон броузера будет не более некоторого порогового.
  • 0

#15 VegaX

VegaX

    Активный участник

  • Members
  • PipPip
  • 85 сообщений

Отправлено 05 апреля 2006 - 17:32

Я предложил общую концепцию, а не частное решение.

Я имею ввиду что можно использовать такой подход, что бы избавить себя от цикла поиска по существующим окнам - пусть за тебя это будет делать Силк Тест.
При необходимости поиска окна с более сложной структорой, вполне возможно что даный подход не будет эффективен и можно будет использовать цикл. Но согласись, обычно бывает открыто один - два бровзера. И на верхнем уровне они имеют простую структуру тагов.
:dirol:
  • 0

#16 KaNoN

KaNoN

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

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

Отправлено 05 апреля 2006 - 17:44

Я предложил общую концепцию, а не частное решение.

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

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

Он и так все за нас делает. Тем более, что я предлагал это сделать на уровне функциональности. Тут беда в том, что нужно выбирать между громоздкой декларацией окна и нестабильной функциональностью (а все случаи поведения окон предсказать трудно)

При необходимости поиска окна с более сложной структорой, вполне возможно что даный подход не будет эффективен и можно будет использовать цикл.

Там придется. И это очень накладно. Например, мне нужно было позакрывать все окна броузеров. А у меня там были и модальные окна. Стандартными функциями это сделать не получилось, так как некоторые окна не содержали нужных элементов. Пришлось активировать все Browser окна и нажимать на них Alt-F4. Вот только тогда удалось сделать общую функцию для закрытия
окон броузера. Но это для закрытия, а в других задачах нужно еще и за исключениями хорошенько проследить

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

Ну, это зависит от приложения, но действительно можно стараться сводить количество активных окон броузера к минимуму. В поддержку твоего утверждения я могу напомнить, что неспроста к окну Browser прицепили напарника Browser2. Но стоит появиться еще одному окну (а это может быть какое-нить модальное окно броузера), то тут надо хитрить.
  • 0

#17 Pet

Pet

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

  • Members
  • Pip
  • 9 сообщений

Отправлено 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 ()


  • 0

#18 VegaX

VegaX

    Активный участник

  • Members
  • PipPip
  • 85 сообщений

Отправлено 06 апреля 2006 - 07:47

Почему нельзя - можно.
Я постоянно использую как BrowserChild.SetActive ( ) так и BrowserPage.SetActive () - работает нормально.
.... ну конечно бывают проблемы если я по ремоуту пытаюсь активировать - не всегда срабатывает :dirol: а на локальном компе вроде проблем не было.
  • 0

#19 KaNoN

KaNoN

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

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

Отправлено 06 апреля 2006 - 09:11

Возможно это проблема с настройками расширений (в частности IE DOM, так как данная проблема специфична для веб-приложений).
Я тоже сталкивался с тем, что нужно было активировать нужную страницу и SetActive не хотел работать. Вопрос в том, где эти настройки хранятся и что именно там настраивать.
  • 0


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

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