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

Фотография

Метод проверки видимости объекта на экране...


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

#1 Svetlanka

Svetlanka

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Svetlanka

Отправлено 03 августа 2006 - 13:59

:blush:
IsViewable или IsVisible - не подходят: IsVisible - вообще не из той оперы(проверяет не Hidden ли), а IsViewable - для окон... других. И что же теперь делать?! Неужели никак не определить, есть ли конкретный объект на экране?( (Прокручиваем содержимое клавишами PgDn (вместо "неработающего" скролла), а в том что прокрутили до конца, надо как-то убедиться, хотя бы наличием некого объекта.)
Или кто знает, как собрать элементы именно те, что видны на экране пользователю!? ПЛИЗ!!! :crazy:
  • 0

#2 Svetlanka

Svetlanka

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Svetlanka

Отправлено 03 августа 2006 - 14:20

Простите, не упомянула: метод или способ нужен при работе с SilkTest

:blush:
  • 0

#3 KaNoN

KaNoN

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

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

Отправлено 03 августа 2006 - 18:14

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

Есть один хитрый вариант. Можно перебрать все элементы страницы и для каждого из них сделать клик. Если объект за пределами области видимости,
то это действие вызовет исключенеие, которое можно перехватить.

По крайней мере попробовать можно
  • 0

#4 Svetlanka

Svetlanka

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Svetlanka

Отправлено 04 августа 2006 - 08:17

Да, KaNoN, спасибо! :blush:
Успешно!
Единственное, надо проконтролировать настройку Agent'а, чтобы тот не прокручивал страницу автоматически:
 [ ] Browser.BrowserChild("***").SetActive()
	[ ] Agent.SetOption (OPT_SCROLL_INTO_VIEW, FALSE)
	[-] do
  [ ] Browser.BrowserChild("***")..HtmlText("***").Click()
	[-] except
  [ ] ErrorHandler()
  [ ] print("Вне поля доступа")
	[ ] Agent.SetOption (OPT_SCROLL_INTO_VIEW, TRUE)//возвращаем настройку, если та изначально была установлена - у меня - да


И: такая хитрость прошла только с HTMLText. А HTMLImage на "Click()" exeptions не выдает, а "DoClick()" нажимает его, даже если HTMLImage не виден!
  • 0

#5 KaNoN

KaNoN

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

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

Отправлено 04 августа 2006 - 09:05

Есть другая хитрость. Можно извлечь координаты прямоугольной области окна браузера (BrowserChild) и прямоугольную область нужного объекта.
Извлекается это методом GetRect() , который возвращает величину типа
RECT, у которой есть поля xPos, yPos - координаты левого верхнего угла элемента, xSize, ySize - ширина и высота. То есть проверка сведется к проверке на пересечение двух прямоугольных областей
  • 0

#6 Svetlanka

Svetlanka

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Svetlanka

Отправлено 04 августа 2006 - 09:21

Да, KaNoN!
Согласна. Только это уже на крайний случай, кому приспичит искать HTMLImage или что еще сложное... Так сказать, последний метод! :blush:

Да, а про настройки Agent.SetOption (OPT_SCROLL_INTO_VIEW, FALSE):
они почему-то после отработки скрипта с таким переключением... (И если мы не вернем в состояниe TRUE.) Так вот, настройки у самого SilkTest'а остаются неизмененными...! Какие были вначале - TRUE, так и остались!
И как это так получается?!
  • 0

#7 Svetlanka

Svetlanka

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Svetlanka

Отправлено 04 августа 2006 - 09:23

И то, здесь нужно быть осторожным с методом GetRect(). Он часто фальшивит, давая смещенные координаты, если это куча вложенных окон!
  • 0

#8 KaNoN

KaNoN

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

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

Отправлено 04 августа 2006 - 10:01

  Да, KaNoN!
Согласна. Только это уже на крайний случай, кому приспичит искать HTMLImage или что еще сложное... Так сказать, последний метод! 

Не, это еще не крайний случай, а вполне даже логичный. Это просто вариант

Да, а про настройки Agent.SetOption (OPT_SCROLL_INTO_VIEW, FALSE):
они почему-то после отработки скрипта с таким переключением... (И если мы не вернем в состояниe TRUE.) Так вот, настройки у самого SilkTest'а остаются неизмененными...! Какие были вначале - TRUE, так и остались!
И как это так получается?!


Agent.SetOption устанавливает опции во время выполнения, не меняя настройки среды (хранящиеся в opt-файле). Соответственно, во время выполнения скрипта настройки меняются как надо, но только на время выполнения. А сам файл, который эти настройки хранит и откуда они считываются, не меняется.

И то, здесь нужно быть осторожным с методом GetRect(). Он часто фальшивит, давая смещенные координаты, если это куча вложенных окон!


Естественно, что GetRect возвращает координаты объекта в клиентской области родительского окна. Поэтому можно написать функцию, которая обрабатывает координаты не только для родительского окна, но и для других окон, находящихся между некоторыми объектами в иерархии. Хитро, но для данной задачи полезно
  • 0

#9 VegaX

VegaX

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

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

Отправлено 04 августа 2006 - 10:41

Есть опция агента OPT_SHOW_OUT_OF_VIEW, но похоже она не работает корректно на версии 6.5. Можете попробовать у себя - а вось :)

Естественно, что GetRect возвращает координаты объекта в клиентской области родительского окна.


Хотел бы уточнить, что GetRect (TRUE) возвращает координаты глобальные, и их можно использовать, что бы не игратся с иерархиями.
  • 0

#10 Svetlanka

Svetlanka

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Svetlanka

Отправлено 04 августа 2006 - 14:44

Вообще-то я, когда писала:

И то, здесь нужно быть осторожным с методом GetRect(). Он часто фальшивит, давая смещенные координаты, если это куча вложенных окон!


Имела ввиду проблему, которая описана в теме:
Проблемы с GetRect , открытой VegaX, (сейчас она висит на стр.4). Я тоже с ней столкнулась, используя даже не GetRect(), а метод Click() ...(SilkTest пытался нажать на объект, который только что сам считал из окна, и промахивался! ) Все, что смогла тогда придумать- определять опытным путем возможные смещения требуемого объекта. А здесь это очень опасно, особенно когда это смещение неоднозначно определяется. Поэтому этот метод с определением местоположения объектов, из которого нужно делать вывод о его реальной видимости объекта, кажется очень сомнительным.
  • 0


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

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