Метод проверки видимости объекта на экране...
#1
Отправлено 03 августа 2006 - 13:59
IsViewable или IsVisible - не подходят: IsVisible - вообще не из той оперы(проверяет не Hidden ли), а IsViewable - для окон... других. И что же теперь делать?! Неужели никак не определить, есть ли конкретный объект на экране?( (Прокручиваем содержимое клавишами PgDn (вместо "неработающего" скролла), а в том что прокрутили до конца, надо как-то убедиться, хотя бы наличием некого объекта.)
Или кто знает, как собрать элементы именно те, что видны на экране пользователю!? ПЛИЗ!!!
#2
Отправлено 03 августа 2006 - 14:20
#3
Отправлено 03 августа 2006 - 18:14
Есть один хитрый вариант. Можно перебрать все элементы страницы и для каждого из них сделать клик. Если объект за пределами области видимости,Неужели никак не определить, есть ли конкретный объект на экране?( (Прокручиваем содержимое клавишами PgDn (вместо "неработающего" скролла), а в том что прокрутили до конца, надо как-то убедиться, хотя бы наличием некого объекта.)
Или кто знает, как собрать элементы именно те, что видны на экране пользователю!? ПЛИЗ!!!
то это действие вызовет исключенеие, которое можно перехватить.
По крайней мере попробовать можно
#4
Отправлено 04 августа 2006 - 08:17
Успешно!
Единственное, надо проконтролировать настройку 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 не виден!
#5
Отправлено 04 августа 2006 - 09:05
Извлекается это методом GetRect() , который возвращает величину типа
RECT, у которой есть поля xPos, yPos - координаты левого верхнего угла элемента, xSize, ySize - ширина и высота. То есть проверка сведется к проверке на пересечение двух прямоугольных областей
#6
Отправлено 04 августа 2006 - 09:21
Согласна. Только это уже на крайний случай, кому приспичит искать HTMLImage или что еще сложное... Так сказать, последний метод!
Да, а про настройки Agent.SetOption (OPT_SCROLL_INTO_VIEW, FALSE):
они почему-то после отработки скрипта с таким переключением... (И если мы не вернем в состояниe TRUE.) Так вот, настройки у самого SilkTest'а остаются неизмененными...! Какие были вначале - TRUE, так и остались!
И как это так получается?!
#7
Отправлено 04 августа 2006 - 09:23
#8
Отправлено 04 августа 2006 - 10:01
Не, это еще не крайний случай, а вполне даже логичный. Это просто вариантДа, KaNoN!
Согласна. Только это уже на крайний случай, кому приспичит искать HTMLImage или что еще сложное... Так сказать, последний метод!
Да, а про настройки Agent.SetOption (OPT_SCROLL_INTO_VIEW, FALSE):
они почему-то после отработки скрипта с таким переключением... (И если мы не вернем в состояниe TRUE.) Так вот, настройки у самого SilkTest'а остаются неизмененными...! Какие были вначале - TRUE, так и остались!
И как это так получается?!
Agent.SetOption устанавливает опции во время выполнения, не меняя настройки среды (хранящиеся в opt-файле). Соответственно, во время выполнения скрипта настройки меняются как надо, но только на время выполнения. А сам файл, который эти настройки хранит и откуда они считываются, не меняется.
И то, здесь нужно быть осторожным с методом GetRect(). Он часто фальшивит, давая смещенные координаты, если это куча вложенных окон!
Естественно, что GetRect возвращает координаты объекта в клиентской области родительского окна. Поэтому можно написать функцию, которая обрабатывает координаты не только для родительского окна, но и для других окон, находящихся между некоторыми объектами в иерархии. Хитро, но для данной задачи полезно
#9
Отправлено 04 августа 2006 - 10:41
Естественно, что GetRect возвращает координаты объекта в клиентской области родительского окна.
Хотел бы уточнить, что GetRect (TRUE) возвращает координаты глобальные, и их можно использовать, что бы не игратся с иерархиями.
#10
Отправлено 04 августа 2006 - 14:44
И то, здесь нужно быть осторожным с методом GetRect(). Он часто фальшивит, давая смещенные координаты, если это куча вложенных окон!
Имела ввиду проблему, которая описана в теме:
Проблемы с GetRect , открытой VegaX, (сейчас она висит на стр.4). Я тоже с ней столкнулась, используя даже не GetRect(), а метод Click() ...(SilkTest пытался нажать на объект, который только что сам считал из окна, и промахивался! ) Все, что смогла тогда придумать- определять опытным путем возможные смещения требуемого объекта. А здесь это очень опасно, особенно когда это смещение неоднозначно определяется. Поэтому этот метод с определением местоположения объектов, из которого нужно делать вывод о его реальной видимости объекта, кажется очень сомнительным.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных