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

Фотография

Тест Web-приложений


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

#1 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

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

Я только начил этот непростой и новый для себя путь - тестирование. Изучаю СилкТест
Задача: оттестить веб-приложение.

Первый вопрос:

на странице есть таблица, в которой есть несколько столбцов, в которых есть несколько ссылок. дальше по этим ссылкам приблизительно такиеже страницы, до 3-го уровня.
Как бы мне пробежатся по всем этим ссылкам и сохранить результат там где я смогбы его прочитать и оценить?

Зарание благодарен.
  • 0

#2 Genka

Genka

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

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


Отправлено 23 ноября 2007 - 15:26

почитайте вот это руководство для начала
там в том числе есть глава Тестирование веб-приложений
  • 0

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

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

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


#3 KaNoN

KaNoN

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

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

Отправлено 23 ноября 2007 - 20:59

на странице есть таблица, в которой есть несколько столбцов, в которых есть несколько ссылок. дальше по этим ссылкам приблизительно такиеже страницы, до 3-го уровня.
Как бы мне пробежатся по всем этим ссылкам и сохранить результат там где я смогбы его прочитать и оценить?

Итак, проявляются 2 подзадачи:
1) Перебрать все ссылки
2) Записать результаты в некоторый свой формат

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

[+] LIST OF WINDOW GetLinks( WINDOW wParent )
				[ ] LIST OF WINDOW lwLinks = {}
				[ ] WINDOW wWin
				[ ] WINDOW wChild
				[ ] 
				[+] for each wWin in wParent.GetChildren()
								[+] if( wWin.GetClass() == HtmlLink )
												[ ] ListAppend( lwLinks , wWin )
								[+] else
												[+] for each wChild in wWin.GetChildren()
																[ ] lwWins = lwWins + GetLinks( wChild )
				[ ] return lwLinks
Если устранить конкретику, то у нас есть некоторая активная страница некоторого активного окна браузера, соответственно, все ссылки мы извлечем так:
[ ] LIST OF WINDOW lwLinks
	[ ] Browser.SetActive()
	[ ] lwLinks = GetLinks( BrowserPage )
То есть мы оперируем только конкретным окном браузера и только активной страницей.
Так мы получаем список ссылок. Нажатие на ссылку осуществляется методом Click.
Загрузки страницы мы можем ждать с помощью Browser.WaitForReady(). Данный вызов как раз ожидает, пока страница догрузится полностью. По умолчанию ожидание занимает 3 минуты (этого более чем достаточно).
А проверить, что реально что-то загрузилось - это уже зависит от конкретных требований. В частности, для того, чтобы проверить, что ссылка просто не является битой, достаточно проверить, что после Browser.WaitForReady() значение BrowserPageNotFound.bExists вернет FALSE (то есть выскочила некоторая страница, а не сообщение, что нет такой страницы). Если же появилась такая страница, то мы рапортуем об ошибке. Эта часть алгоритма реализуется в виде
[ ] WINDOW wWin
				[ ] 
				[-] for each wWin in lwLinks
								[ ] Print("Navigating link {wWin.GetText()}. URL: {wWin.GetLocation()}")
								[ ] wWin.Click()
								[ ] Browser.WaitForReady()
								[-] if( BrowserPageNotFound.bExists )
												[ ] Log.Error("Failed")
												[ ] Browser.Back.Click()
												[ ] Browser.WaitForReady()
И самое интересное - аналогичные действия надо повторить для всех ссылок на странице, которая загрузилась. Причем это делается до некоторого уровня вложенности. Опять рекурсия. И это делается так:
[+] VOID CheckLinks( INTEGER iDepth )
				[ ] WINDOW wWin
				[ ] 
				[+] if( iDepth <= 0 )
								[ ] return
				[ ] Browser.SetActive()
				[ ] 
				[+] for each wWin in GetLinks( BrowserPage )
								[ ] Print("Navigating link {wWin.GetText()}. URL: {wWin.GetLocation()}")
								[ ] wWin.Click()
								[ ] Browser.WaitForReady()
								[+] if( BrowserPageNotFound.bExists )
												[ ] Log.Error("Failed")
												[ ] Browser.Back.Click()
												[ ] Browser.WaitForReady()
								[+] else
												[ ] Print("OK")
												[ ] CheckLinks( iDepth-1 )
				[ ]
Вышеприведенная функция в комбинации с GetLinks функцией являются фактически движком системы. Теперь осталось задать старт системе.
Если окон барузера нет, то надо бы его стартовать, если же хотя бы одно окно есть, то нужно его активизировать и перейти на некоторую стартовую страницу и уже начиная с нее прощупывать страницы. Выглядит это примерно так:
[ ] STRING sURL = "www.google.com" // Here is to be your URL
	[ ] 
	[+] if( !Browser.bExists )
		[ ] Browser.Invoke()
		[ ] Browser.WaitForReady()
	[ ] Browser.SetActive()
	[ ] Browser.Navigate( sURL )
	[ ] 
	[ ] CheckLinks( 3 )
Примерно вот так в конечном итоге выглядит перебор всех ссылок до глубины 3.

Вторая задача попроще. Главное - зафиксировать имя файла в некоторой глобальной переменной, например STRING g_sFile
Затем надо просто определить свои функции логирования (аналоги Print, LogError, LogWarning). Например, это можно сделать так:
[+] VOID MyPrint( varargs OF ANYTYPE laValue )
	[ ] STRING sResult
	[ ] ANYTYPE aValue
	[ ] 
	[ ] HFILE hFile
	[ ] 
	[+] for each aValue in laValue
		[ ] sResult += "{sValue}"
	[ ] 
	[ ] hFile = FileOpen( g_sFile , FM_APPEND )
	[ ] FileWriteLine( hFile , sResult )
	[ ] FileClose( hFile )
[ ] 
[+] VOID MyWarning( STRING sMessage )
	[ ] hFile = FileOpen( g_sFile , FM_APPEND )
	[ ] FileWriteLine( hFile , "WARNING!!!:" + sMessage )
	[ ] FileClose( hFile )
[ ] 
[+] VOID MyError( STRING sMessage )
	[ ] hFile = FileOpen( g_sFile , FM_APPEND )
	[ ] FileWriteLine( hFile , "Error!!!:" + sMessage )
	[ ] FileClose( hFile )
Эти функции являются заменителями функций Print, LogWaring, LogError соответственно. Достаточно просто произвести замену стандартных функций логирования своими и получим вывод в некоторый свой файл. Формат уже можно подобрать по вкусу.

Вот примерно так это решается

P.S.: Этот код взят просто из головы и отладки не производилось, поэтому что-то может работать не так, но принцип все-равно отражен.
  • 0

#4 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

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

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

1) В данном месте кода возникла ошибка:


А именно к строке, for each wChild in wWin.GetChildren(), если sURL = "www.google.com" пишит:
[ ] *** DefaultBaseState is setting Browser active, No window was active
[ ] *** Error: Window '[HtmlPushButton]&name='btnG'' was not found
[ ] Occurred in BrowserPage.HtmlPushButton("&name='btnG'")::GetChildren


2) Когда начинаем проверять все линки, я нехочу logout-иться, и изменил код чтобы не активировать эту ссылку:


Но после выполнения он выдает:

[-] Testcase GetAllLinks2 - Passed
[ ] *** DefaultBaseState is setting Browser active, No window was active
[ ] Navigating link Вихід. URL: http://192.168.3.150:8082/logout.php

Т.е. или я что-то не то делаю, или он только одну ссылку видит.

3) На текст Log.Error("Failed") у Cилка однозначная реакция: Variable Log is not defined.
  • 0

#5 KaNoN

KaNoN

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

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

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

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

1) В данном месте кода возникла ошибка:


А именно к строке, for each wChild in wWin.GetChildren(), если sURL = "www.google.com" пишит:
[ ] *** DefaultBaseState is setting Browser active, No window was active
[ ] *** Error: Window '[HtmlPushButton]&name='btnG'' was not found
[ ] Occurred in BrowserPage.HtmlPushButton("&name='btnG'")::GetChildren

DefaultBaseState и ошибка, связанная с ним, к данному участку кода никакого отношения не имеет. В самом начале кода встявьте строчки вида:
[+] if( !Browser.Exists() )
				 [ ] Browser.Invoke()
[ ] Browser.SetActive()

А затем уже перейдите на нужный сайт (Browser.Navigate( <Some URL> ) ).

Насчет вот этого
[ ] *** Error: Window '[HtmlPushButton]&name='btnG'' was not found
попробуйте у этой кнопки сделать тэг
$btnG
Это более надежно и не конфликтует с предыдущими версиями Силка (приведенный в вашем примере вариант тега появился в поздних версиях)

2) Когда начинаем проверять все линки, я нехочу logout-иться, и изменил код чтобы не активировать эту ссылку:


Но после выполнения он выдает:

[-] Testcase GetAllLinks2 - Passed
[ ] *** DefaultBaseState is setting Browser active, No window was active
[ ] Navigating link Вихід. URL: http://192.168.3.150:8082/logout.php

Т.е. или я что-то не то делаю, или он только одну ссылку видит.

Попробуйте линк идентифицировать по какому-то другому признаку, например, его Window ID (для этого есть метод GetID() )

3) На текст Log.Error("Failed") у Cилка однозначная реакция: Variable Log is not defined.

Прошу прощения, это я ошибся. Там должно быть LogError, просто я по аналогии с ТестКомплитом создал класс для логирования, вот и пользуюсь.
  • 0

#6 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

Отправлено 27 ноября 2007 - 12:12

Пожалуйста скажите в чем тут фокус:

[codebox]
[-] VOID GetCh (WINDOW BrPage)
[ ] LIST OF WINDOW wList
[ ] WINDOW wC
[ ] wList = BrPage.GetChildren()
[ ]
[-] for each wC in wList
[ ] Print ("Class: {wC.GetClass()}.")
[-] if ( wC.GetClass() == HtmlLink )
[ ] Print ("Navigation link {wC.GetText()}. URL: {wC.GetLocation()}")

[/codebox]

При выполнении данного кода для URL:"www.ya.ru" видит только одну таблицу, а ссылок не видит.
  • 0

#7 vass

vass

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

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

Отправлено 27 ноября 2007 - 12:25

.... странно, KaNoN с самого начала написал, что его код - это всего лишь базис для дальнейшего развития и он его даже не компилил и не проверял на реальных данных. Так почему же до сих пор у Вас, Al*GatoR, всё никак не включится собственный источник логики ? Вы хотите, чтобы KaNoN за Вас полностью написал Ваш скрипт?...


К "вопросу о" : потому что в приведенном коде недостаточно рекурсии. Браузер содержит страничку, страница - таблицу, таблица - колонки, а уже в колонках (возможно!) находятся линки. Это значит нужно 3 раза GetChildren (считая от страницы), а не 1. Попробуйте прочитать мануалы к тестированию веб-приложений и немного пораспознавать их :lol:
  • 0

#8 KaNoN

KaNoN

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

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

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

Пожалуйста скажите в чем тут фокус:

[-] VOID GetCh (WINDOW BrPage)	[ ] LIST OF WINDOW wList		[ ] WINDOW wC			[ ] wList = BrPage.GetChildren() 	[ ] 			[-] for each wC in wList		[ ] Print ("Class: {wC.GetClass()}.")		[-] if ( wC.GetClass() == HtmlLink )			[ ] Print ("Navigation link {wC.GetText()}. URL: {wC.GetLocation()}")

При выполнении данного кода для URL:"www.ya.ru" видит только одну таблицу, а ссылок не видит.

Вы посмотрите в моем примере функцию GetLinks и посмотрите, в чем разница. У меня там еще дальше рассматривается случай, если текущих элемент не является ссылкой. В этом случае у данного объекта перебираются ссылки и для каждого объекта рекурсивно вызывается GetLinks. Так вы извлечете только ссылки на первом уровне иерархии
  • 0

#9 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

Отправлено 27 ноября 2007 - 13:25

К "вопросу о" : потому что в приведенном коде недостаточно рекурсии. Браузер содержит страничку, страница - таблицу, таблица - колонки, а уже в колонках (возможно!) находятся линки. Это значит нужно 3 раза GetChildren (считая от страницы), а не 1.


Благодарю, совет пришелся кстати :lol: , нашел все линки:

[-] VOID wDeeper (WINDOW wParent)	[ ] WINDOW wCh	[-] for each wCh in wParent.GetChildren()		[ ] Print ("Class: {wCh.GetClass()}")		[-] if ( wCh.GetClass() == HtmlLink )			[ ] Print ("Navigation link {wCh.GetText()}. URL: {wCh.GetLocation()}")		[-] else			[ ] wDeeper (wCh)

  • 0

#10 KaNoN

KaNoN

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

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

Отправлено 27 ноября 2007 - 13:27

.... странно, KaNoN с самого начала написал, что его код - это всего лишь базис для дальнейшего развития и он его даже не компилил и не проверял на реальных данных. Так почему же до сих пор у Вас, Al*GatoR, всё никак не включится собственный источник логики ?

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

to Al*GatoR:
А GetLinks таки не удалось наладить? Эта функция не привязана к какому-то конкретному окну и не меняет состояния приложения. Вроде проблем быть не должно
  • 0

#11 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

Отправлено 27 ноября 2007 - 13:38

Вы посмотрите в моем примере функцию GetLinks и посмотрите, в чем разница. У меня там еще дальше рассматривается случай, если текущих элемент не является ссылкой. В этом случае у данного объекта перебираются ссылки и для каждого объекта рекурсивно вызывается GetLinks. Так вы извлечете только ссылки на первом уровне иерархии


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

#12 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

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

в ходе просмотра всех ссылок возникают такие ошибки:

[ ] *** Error: Window '[HtmlPopupList]&name='MONTH'' was not found
[ ] Occurred in BrowserPage.HtmlPopupList("&name='MONTH'")::GetChildren


решил вопрос строкой if ( wCh.GetClass() != HtmlPopupList ) (просто пропуск таких классов)


[ ] *** Error: Window '[HtmlPushButton]&name='CALC'' was not found
[ ] Occurred in BrowserPage.HtmlPushButton("&name='CALC'")::GetChildren


решение аналогичное предыдущему

[ ] *** Error: Window '[HtmlColumn]&id='CT'' was not found
[ ] Occurred in BrowserPage.HtmlTable("Сортування:").HtmlColumn("&id='CT'")::GetChildren


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

Потом я решил попробовать этот тесткейс на странице "Google" c найденным словом "Hello", появились такие ошибки:

[ ] *** Error: Window '[HtmlHidden]&name='hl'' is not unique, attributes match for multiple items.
[ ] Occurred in BrowserPage.HtmlHidden("&name='hl'")::GetChildren

[ ] *** Error: Window '[HtmlTextField]&name='q'' is not unique, attributes match for multiple items.
[ ] Occurred in BrowserPage.HtmlTextField("&name='q'")::GetChildren

[ ] *** Error: Window '[HtmlRadioList]&id='all';name='lr'' is not unique, attributes match for multiple items.
[ ] Occurred in BrowserPage.HtmlRadioList("&id='all';name='lr'")::GetChildren

[ ] *** Error: Window '[HtmlText]^После 16 лет совместной жизни они приняли решение о разводе. В эксклюзивном интервью ! знаменитые фигуристы рассказали, почему' was not found
[ ] Occurred in BrowserPage.HtmlText("^После 16 лет совместной жизни они приняли решение о разводе. В эксклюзивном интервью ! знаменитые фигуристы рассказали, почему")::GetChildren

[ ] *** Error: Window '[HtmlLink]Политика конфиденциальности' is not unique
[ ] Occurred in GetLocation


Эти ошибки я методично устранял, как и прежде, но ведь как раз "HtmlLink" этот класс мне и нужен, я немогу и его игнорировать.

Что можете посаветовать?
  • 0

#13 vass

vass

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

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

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

мне вообще кажется ошибочным ЛЮБОЙ метод, который связан с GetChildren() (но т.к. похоже у меня с KaNoN-ом тут холивар, то я до последнего об этом молчал...)
На Вашем месте я бы сделал так:
ограничил бы в рекурсии поиск подобъектов классами HtmlText, HtmlTable,HtmlColumn. А для каждого из них делал бы динамическое конструирование линков :
LIST OF WINDOW GetPossibleLinks (window wSomeHtml)
  LIST OF WINDOW lwResult
  INTEGER i = 1
  window wLink = wSomeHtml.HtmlLink("#{i++}")
  while wLink.Exists ()
	lwResult += {wLink}
	wLink = wSomeHtml.HtmlLink("#{i++}")
  return lwResult
если этот список пустой - значит линков нет, идём дальше.
  • 0

#14 Genka

Genka

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

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


Отправлено 28 ноября 2007 - 16:34

мне вообще кажется ошибочным ЛЮБОЙ метод, который связан с GetChildren() (но т.к. похоже у меня с KaNoN-ом тут холивар, то я до последнего об этом молчал...)


я вообще-то стараюсь в ваши холивары не встревать, но тут соглашусь, что этот вариант все же лучше, чем GetChildren() .
  • 0

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

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

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


#15 KaNoN

KaNoN

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

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

Отправлено 28 ноября 2007 - 18:37

мне вообще кажется ошибочным ЛЮБОЙ метод, который связан с GetChildren() (но т.к. похоже у меня с KaNoN-ом тут холивар, то я до последнего об этом молчал...)


я вообще-то стараюсь в ваши холивары не встревать, но тут соглашусь, что этот вариант все же лучше, чем GetChildren() .

У GetChildren-а основная проблема в его тормознутости. Но эту тормознутость я свел к минимуму (не зря же я его использую в for each). Насчет вышеприведенного примера - это неплохое решение. Но вот все равно надо как-то дочерние окна перебирать.
  • 0

#16 KaNoN

KaNoN

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

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

Отправлено 28 ноября 2007 - 19:09

мне вообще кажется ошибочным ЛЮБОЙ метод, который связан с GetChildren() (но т.к. похоже у меня с KaNoN-ом тут холивар, то я до последнего об этом молчал...)
На Вашем месте я бы сделал так:
ограничил бы в рекурсии поиск подобъектов классами HtmlText, HtmlTable,HtmlColumn. А для каждого из них делал бы динамическое конструирование линков :

LIST OF WINDOW GetPossibleLinks (window wSomeHtml)
  LIST OF WINDOW lwResult
  INTEGER i = 1
  window wLink = wSomeHtml.HtmlLink("#{i++}")
  while wLink.Exists ()
	lwResult += {wLink}
	wLink = wSomeHtml.HtmlLink("#{i++}")
  return lwResult
если этот список пустой - значит линков нет, идём дальше.

Гулять так гулять
[+] LIST OF WINDOW GetLinks( WINDOW wParent )
				[ ] INTEGER i = 1
				[ ] LIST OF WINDOW lwResult = {}
				[ ] 
				[+] while( wParent.AnyWin("#{i}").bExists )
								[+] if( wParent.AnyWin("#{i}").GetNativeClass() == "HtmlLink" )
												[ ] ListAppend( lwResult , wParent.AnyWin("#{i}") )
								[+] else
												[ ] lwResult += GetLinks( wParent.AnyWin("#{i}") )
								[ ] i++
				[ ] 
				[ ] return lwResult
Снова тормознутый, но схватит все ссылки на странице. Единственный недостаток всего решения, которое я предоставил - это то, что изначально предполагается, что каждая ссылка осуществляет переход на другую страницу. Но если по ссылке срабатывает клиентский скрипт (например мы выбрали меню и выскочил подпункт), то в этом месте произойдет слет с рельс (что видимо и произошло).

Как еще один вариант, стоит посмотреть такую утилитку как Link Tester, которую можно активировать, выбрав в Силке меню Tools > Link Tester, он как раз извлекает список ссылок до некоторого уровня вложенности. Может быть с ним что-то удастся сделать
  • 0

#17 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

Отправлено 29 ноября 2007 - 09:16

[+] LIST OF WINDOW GetLinks( WINDOW wParent )
				[ ] INTEGER i = 1
				[ ] LIST OF WINDOW lwResult = {}
				[ ] 
				[+] while( wParent.AnyWin("#{i}").bExists )
								[+] if( wParent.AnyWin("#{i}").GetNativeClass() == "HtmlLink" )
												[ ] ListAppend( lwResult , wParent.AnyWin("#{i}") )
								[+] else
												[ ] lwResult += GetLinks( wParent.AnyWin("#{i}") )
								[ ] i++
				[ ] 
				[ ] return lwResult
Снова тормознутый, но схватит все ссылки на странице. Единственный недостаток всего решения, которое я предоставил - это то, что изначально предполагается, что каждая ссылка осуществляет переход на другую страницу. Но если по ссылке срабатывает клиентский скрипт (например мы выбрали меню и выскочил подпункт), то в этом месте произойдет слет с рельс (что видимо и произошло).

Как еще один вариант, стоит посмотреть такую утилитку как Link Tester, которую можно активировать, выбрав в Силке меню Tools > Link Tester, он как раз извлекает список ссылок до некоторого уровня вложенности. Может быть с ним что-то удастся сделать



Что-то никак ниполучается достучатся до ссылок находящихся в динамически формирующейся таблице на PHP.
Link Tester тоже там ничего невидит. :crazy:
  • 0

#18 KaNoN

KaNoN

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

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

Отправлено 29 ноября 2007 - 09:40

[+] LIST OF WINDOW GetLinks( WINDOW wParent )
				[ ] INTEGER i = 1
				[ ] LIST OF WINDOW lwResult = {}
				[ ] 
				[+] while( wParent.AnyWin("#{i}").bExists )
								[+] if( wParent.AnyWin("#{i}").GetNativeClass() == "HtmlLink" )
												[ ] ListAppend( lwResult , wParent.AnyWin("#{i}") )
								[+] else
												[ ] lwResult += GetLinks( wParent.AnyWin("#{i}") )
								[ ] i++
				[ ] 
				[ ] return lwResult
Снова тормознутый, но схватит все ссылки на странице. Единственный недостаток всего решения, которое я предоставил - это то, что изначально предполагается, что каждая ссылка осуществляет переход на другую страницу. Но если по ссылке срабатывает клиентский скрипт (например мы выбрали меню и выскочил подпункт), то в этом месте произойдет слет с рельс (что видимо и произошло).

Как еще один вариант, стоит посмотреть такую утилитку как Link Tester, которую можно активировать, выбрав в Силке меню Tools > Link Tester, он как раз извлекает список ссылок до некоторого уровня вложенности. Может быть с ним что-то удастся сделать



Что-то никак ниполучается достучатся до ссылок находящихся в динамически формирующейся таблице на PHP.
Link Tester тоже там ничего невидит. :dirol:

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


ЗЫ: Это мой 666-й пост в этом форуме. Теперь я АЦЦКИЙ СОТОНА :crazy:
  • 0

#19 Al*GatoR

Al*GatoR

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

  • Members
  • Pip
  • 43 сообщений
  • ФИО:Александр К
  • Город:г.Киев

Отправлено 29 ноября 2007 - 11:22

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


Link-и в динамической таблице все ссылаются на другие страницы. Выброса из текущей страницы не наблюдается.

Думаю что буду обращатся к конкретной таблице с конкретным индексом.



Правда придется учитывать возможность вложеных таблиц.
  • 0

#20 Case

Case

    Основатель

  • Members
  • PipPipPipPipPipPip
  • 7 071 сообщений
  • ФИО:Панкратов Вячеслав
  • Город:Украина, Киев.

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

ЗЫ: Это мой 666-й пост в этом форуме. Теперь я АЦЦКИЙ СОТОНА :dirol:

:crazy:
Сделать персональный статус рядом с ником?
  • 0
Слава Панкратов
Редактор портала www.it4business.ru


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

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