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

Фотография

ТС не дожидается загрузки элементов


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

#1 Mrak

Mrak

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Мрак Просто Мрак

Отправлено 26 января 2012 - 17:29

Всем привет.
Сейчас занимаюсь автотестами .NET приложений.
И столкнулся с неприятной проблемой. Не самое лучшее решение со стороны разработки и тормозные виртуалки. И как следствие падение теста при загрузки страницы.
page.wait(); не спасает, получается, что страница загрузилась, но некоторые элементы еще недоступны и по ним нельзя кликнуть.
Тот кто их писал нашел жесткое решение проблемы, это глобальные таймауты. aqUtils.delay(время*число) собственно время - задержка в мс, число какое то значение тайм аута (иногда такие задержки составляют по несколько минут, хотя иногда надо от силы секунд 30). Но и это не всегда спасает, то есть скрипт тупо не дожидается. Так же побочный эффект в таком подходе выражается просто в огромном времени прохождения скрипта. А если он падает под конец это просто неописуемо :)
Итак собственно подошли к проблеме:
Есть ли какие методы\ функции которые будут проверять появился ли элемент на странице \ доступен ли этот элемент. Можно конечно использовать после каждого клика if и проверять доступность, но это тоже не выход, так как скрипт тогда разрастется до невероятных размеров. И если ответ на этот вопрос все же есть, то примеру буду несказанно благодарен:)


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

#2 XXX

XXX

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

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 26 января 2012 - 17:50

http://tctutorial.ru/synch/
  • 0

#3 Mrak

Mrak

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Мрак Просто Мрак

Отправлено 26 января 2012 - 18:26

http://tctutorial.ru/synch/

Спасибо, вот как раз по этому и хотел узнать пример, хелп ТС выдает десяток wait и какой из них выбрать лучше, и как точно использовать в jScript вот тут и начинаются проблемы.

ну вот взять простой пример:
page.document.all.Item(128).NativeWebObject.click()

после этого действия происходит загрузка страницы и открывается окно с некой страницей, на которой есть кнопки ок и отмена.
Собственно страница может грузится 2 секунды а может 30, (при том что статус бар бывает прогружается довольно быстро, а элементы затем подтягиваются в течении промежутка времени)
соответственно надо кликнуть по кнопке Ок.
И вот как объяснить ТС, что бы он дождался момента когда кнопка появится, будет активна?
  • 0

#4 Mrak

Mrak

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Мрак Просто Мрак

Отправлено 26 января 2012 - 18:28

немного и по поводу DOM модели кто нибудь подскажет?:)
(извиняюсь за настырность) но хочется разобраться:)
  • 0

#5 XXX

XXX

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

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 26 января 2012 - 18:41

ну вообще по идее мне казалось после

var page = Sys.Process("iexplore").Page("*");
page.Wait();

все должно прогрузиться на странице..
если нет, то можно попробовать примерно так

if (w.WaitButton("Ok",60000).Exists)
      w,Button("Ok").Click();
else
{     
      Log.Message("Кнопка Ок так и не появилась в течении минуты");
      Runner.Stop();
}


где w это родительский объект для кнопки


По поводу ДОМ модели ничего не скажу..я сразу стал использовать три модель и ей остался верным)
По поводу верстки - если она поехала, и TC это заметил..а вы например нет - то это же замечательно!)задача то найти баги!а не то чтобы скрипт сработал!

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

#6 Mrak

Mrak

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Мрак Просто Мрак

Отправлено 26 января 2012 - 19:11

XXX спасибо..немного изменить и добавить цикл и получится странно извращенная функция которая будет постоянно проверять элемент на странице с некоторой задержкой.

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

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

#7 XXX

XXX

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

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 26 января 2012 - 19:26

XXX спасибо..немного изменить и добавить цикл и получится странно извращенная функция которая будет постоянно проверять элемент на странице с некоторой задержкой.

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



так а зачем цикл с задержками когда в Wait указывается время в течении которого нужно ожидать объект..зачем усложнять ?

в хелпе нашел
The Wait method checks the document.readyState property of the loaded HTML document and returns when this property reports that the page loading is complete. This mechanism of determining whether a web page is completely downloaded is only acceptable for static web pages and not effective for pages with dynamic content. For more information, see Waiting For Page.

т.е. действительно могут быть ситуации когда страница загрузилась а эолементы еще подгружаются..
так что можно почитать чтото тут http://smartbear.com...warticle/12718/
  • 0


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

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