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

Фотография

Window Identifier


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

#1 rb06

rb06

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

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

Отправлено 14 февраля 2007 - 06:45

Привет. У меня загружается страница. Мне необходимо получить Identifier этой текущей страницы. Я догадываюсь ), что надо использовать GetID(). Необходимо только это сделать для текущего окна броузера, то есть как-то его определить в общем виде (например, CurrentBrowserWindow.GetID()). Можно ли средствами SilkTest сделать такое? Спасибо
  • 0

#2 KaNoN

KaNoN

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

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

Отправлено 14 февраля 2007 - 08:31

Для веб-приложений есть одно общее главное окно Browser. Оно соответствует активному окну браузера. У этого окна можно извлечь все, что нужно. Если принципиально извлечь что-то именно из BrowserChild окна, то можно попробовать что-то типа

Browser.BrowserChild("#1").GetID()
  • 0

#3 rb06

rb06

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

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

Отправлено 14 февраля 2007 - 09:04

Если сделать таким образом как Вы предлагаете, то строка Print(Browser.BrowserChild("#1").GetID()) выдаст URL страницы, а меня интересует именно Identifier. Если взять Record-WindowDeclarations - и кликнуть на шапку Explorerа , то выдается следующая информация:
Class - MainWin
Identifier - MAILRUпочтановостирабо
Вот именно "MAILRUпочтановостирабо" меня и интересует

Спасибо
  • 0

#4 KaNoN

KaNoN

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

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

Отправлено 14 февраля 2007 - 10:40

Это я просто пример привел. GetID вернет идентификатор. Есть еще метод GetTag(). Он вернет тэг данного окна. Можно посмотреть другие методы класса AnyWin, которые как-то связаны с рассматриваемой проблемой. Причем определитесь, из какого окна надо извлекать информацию - из главного или дочернего. Это тоже немаловажно. В общем, основная идея такова, что активное окно браузера объявлено как Browser (это стандартное окно) и от этого уже нужно отталкиваться.

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

ЗЫ: Честно говоря, не понимаю, зачем такие извраты.
  • 0

#5 rb06

rb06

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

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

Отправлено 14 февраля 2007 - 10:58

Нужно сделать следующее:
(условно)
br=Browser.GetId() //Присвоить переменной Identifier окна

br.Button.Click() //чтобы потом иметь возможность к нему обращаться
  • 0

#6 rb06

rb06

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

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

Отправлено 14 февраля 2007 - 11:01

Извлекать из главного окна
  • 0

#7 KaNoN

KaNoN

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

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

Отправлено 14 февраля 2007 - 11:28

Ну тогда таких извратов делать не надо. Подобное лучше реализовать так:

STRING sTag = Browser.GetTag() // Извлекаем тэг
WINDOW wMain = MainWin( sTag ) // Вот тут получаем активное в данный момент окно браузера


wMain.SetActive() // Обращаемся к тому же окну

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

#8 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 15 февраля 2007 - 14:07

Если сделать таким образом как Вы предлагаете, то строка Print(Browser.BrowserChild("#1").GetID()) выдаст URL страницы, а меня интересует именно Identifier. Если взять Record-WindowDeclarations - и кликнуть на шапку Explorerа , то выдается следующая информация:
Class - MainWin
Identifier - MAILRUпочтановостирабо
Вот именно "MAILRUпочтановостирабо" меня и интересует

Спасибо

Просмотр сообщения

это у вас так настроено распознавание окон. Ото что там написано вернет .GetCaption () у главного окна, только нужно будет немного порихтовать :)
Еще это вернет .WndTag у данного окна.
я тут еще подумал - мне не совсем понятен вопрос - т.е. Вы хотите по тому, что у Вас есть в окне браузера определять - какое это окно из тех, которые объявлены в фрейме ?
(это я судя по посту

Нужно сделать следующее:
(условно)
br=Browser.GetId() //Присвоить переменной Identifier окна

br.Button.Click() //чтобы потом иметь возможность к нему обращаться

Просмотр сообщения

)
или как ?
Если да, то это довольно оригинальная задачка, которая имеет несколько решений ;)
  • 0

#9 KaNoN

KaNoN

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

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

Отправлено 15 февраля 2007 - 14:13

Это скорее всего нужно, если открылась одна страница, а затем надо открыть другую в новом окне. При этом потом надо будет обратиться к первой странице. Поскольку MainWin там один на всех, то активацию неактивного окна браузера делать приходится с небольшими извратами. Соответственно, надо как-то зафиксировать текущее окно, чтобы потом к нему можно было обратиться.

А может это просто определение по содержимому, к какому окну надо будет обращаться ( ну или попытка сделать это ), ну как и было озвучено. В этом случае все-таки лучше четко фиксировать открытое окно. Меьнше извратом при аналогичном результате
  • 0

#10 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 15 февраля 2007 - 14:25

ну если нужно активировать неактивное окно, то ИМХО проще вызвать
MainWin(StrTran (Explorer.WndTag, "1", "2")).SetActive ()
если оно второе по счету, если N-ное - то вместо 2 вставьте свое число ;)
  • 0

#11 KaNoN

KaNoN

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

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

Отправлено 15 февраля 2007 - 14:32

Да не совсем.

Во-первых, можно тестировать Эксплорер, то это сработает, а вот если еще поддерживать, например, FireFox, Netscape , то Explorer применять бессмысленно. Более того, мы наверняка можем и не знать, каким по счету окажется нужное нам окно. Но если мы предварительно можем получить его тэг, то главное, чтобы выше по иерархии не было такого же окна или с таким же тэгом ( чего можно добиться без особых трудностей) . То есть в общем случае номер окна неопределен.

Кстати, вот этот код

MainWin(StrTran (Explorer.WndTag, "1", "2")).SetActive ()

и вот этот

Browser2.SetActive() идентичны
  • 0

#12 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 15 февраля 2007 - 15:33

ну можно MainWin(StrTran (Browser.WndTag, "1", "2")).SetActive ()
зато Browser3 уже нет, а в верхней конструкции вместо 2 легко указать нужный ;)
  • 0

#13 KaNoN

KaNoN

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

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

Отправлено 15 февраля 2007 - 15:37

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

#14 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 15 февраля 2007 - 15:47

угу. Только нужно, чтобы автор топика уточнил - а что собсно ему нужно, а то мы тут напридумываем нечто с чем-то :air_kiss:
  • 0

#15 KaNoN

KaNoN

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

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

Отправлено 15 февраля 2007 - 15:52

Да вот собсно

Нужно сделать следующее:
(условно)
br=Browser.GetId() //Присвоить переменной Identifier окна

br.Button.Click() //чтобы потом иметь возможность к нему обращаться

Просмотр сообщения


То есть нужно как-то зафиксировать окно, которое активно на данный момент, чтобы потом с ним можно было работать и судя по всему не зависимо от того, будет ли в нужный момент это окно браузера активным или нет. Если это нужно для Browser-а, то это именно так.
  • 0

#16 rb06

rb06

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

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

Отправлено 15 февраля 2007 - 16:27

Извиняюсь, немного опоздал :)

я тут еще подумал - мне не совсем понятен вопрос - т.е. Вы хотите по тому, что у Вас есть в окне браузера определять - какое это окно из тех, которые объявлены в фрейме


У меня n окон. Пока я задачу решаю следующим образом: объявляю во фрейме все окна, чтоб потом можно было с ними оперировать. Когда решу текущую задачу - буду искать способ избежать и этого "в лоб" метода


это просто определение по содержимому, к какому окну надо будет обращаться ( ну или попытка сделать это )


Именно так. Я загружаю страницу - и выковыриваю ее Identifier (то есть то, как оно объявлено во фрейме, чтобы мочь к нему обращаться). По моему мнению, тут наиболее подходит GenerateDecl ( ) (предложил KaNoN) - и потом из этого масива брать первый элемент. Я правда еще не успел опробовать :(
  • 0

#17 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 15 февраля 2007 - 16:49

GenerateDecl ( ) .... хехе ... мсье знает толк в извращениях :diablo:
ИМХО гораздо прямее сделать
[ ] LIST OF WINDOW lw = FindWindow ("/[MainWin]*/[BrowserChild]*")
[ ] INTEGER i
[ ] WINDOW wActiveWin = NULL
[ ] 
[-] for i = 1 to ListCount (lw)
  [-] if lw[i] != BrowserPage && lw[i].Exists () && lw[i].IsActive ()
    [ ] wActiveWin = lw[i]
    [ ] break
[ ] 
[ ] Print (wActiveWin)
если wActiveWin не равно NULL - значит там будет это окно
--
upd: исправил очепятку
  • 0

#18 KaNoN

KaNoN

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

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

Отправлено 15 февраля 2007 - 16:56

Если окно заранее объявлено, то FindWindow безусловно лучше. Но вообще, лучше подумать над тем, как бы организовать структуру окон так, чтобы схожие окна соответствовали некоторому одному объекту в Силке, если с этими страницами работать приходится одинаково. По возможности копните немного в сторону winclass-ов. Для однотипных окон в веб-приложениях это достаточно хорошая штука ( при умелом применении, конечно )
  • 0

#19 KaNoN

KaNoN

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

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

Отправлено 15 февраля 2007 - 17:00

У меня n окон. Пока я задачу решаю следующим образом: объявляю во фрейме все окна, чтоб потом можно было с ними оперировать. Когда решу текущую задачу - буду искать способ избежать и этого "в лоб" метода


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

#20 rb06

rb06

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

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

Отправлено 16 февраля 2007 - 10:43

[ ] LIST OF WINDOW lw = FindWindow ("/[MainWin]*/[BrowserChild]*")
[ ] INTEGER i
[ ] WINDOW wActiveWin = NULL
[ ]
[-] for i = 1 to ListCount (lw)
 [-] if lw[i] != BrowserPage && lw[i].Exists () && lw[i].IsActive ()
   [ ] wActiveWin = lw[i]
   [ ] break
[ ]
[ ] Print (wActiveWin)

Print (wActiveWin) - не выдает результата, хотя и ошибок никаких не выдает, пробую дальше...
  • 0


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

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