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

Фотография

Медленно работает метод FindChild


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

#1 mdv121314

mdv121314

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

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Matyunin Denis
  • Город:Moscow


Отправлено 18 ноября 2011 - 13:36

TC 7.50 JScript

Добрый день!
Подскажите пожалуйста новичку, вот какое дело!

Хотел написать универсальную функцию нажатия на кнопку в приложении, для этого использовал FindChild.

function BtnPress(param)
{
var process = Sys.Process("vfp8");

if(!Sys.WaitProcess("vfp8",100).Exists)
{
Log.Message("Приложение закрыто");
}

var form = Sys.Process("vfp8").Form("SCREEN");

var button = form.FindChild("Caption",param,100);
button.Click();
}

function Test()
{
BtnPress("cmd4");// свойство объекта-Caption(кнопки в данном случае)

}


Вот таким образом функция работает очень медленно, т.к. путь к кнопкам может отличаться, к примеру:

Sys.Process("vfp8").Form("SCREEN").Dialog("show_login").Button("cmd2")
Sys.Process("vfp8").Form("SCREEN").Panel("show_sprspr_e").Button("cmd11")
Sys.Process("vfp8").Form("SCREEN").Dialog("show_zkr_edt").Button("cmd6")

Если вот таким образом действовать, работает быстрее, но пропадает универсальность, и я не смогу нажимать кнопку на Panel:

var dialog = Sys.Process("vfp8").Form("SCREEN").Dialog("*");
var button = dialog.FindChild("Caption",param,100);
button.Click();

Т.е. родителем кнопки может быть Dialog, Panel и в последствии еще что-ндь найдется.

Подскажите, пожалуйста, как мне сделать чтобы ТС быстро отрабатывал данный скрипт, но при этом не пропала универсальность функции???

Заранее, спасибо!!!
  • 0

#2 anagramma

anagramma

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

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 18 ноября 2011 - 14:57

я не уверен, но наверное так:
var Form = Sys.Process("vfp8").Form("SCREEN");
var button = Form.FindChild("Caption",param,100);
button.Click();
  • 0

#3 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 18 ноября 2011 - 15:08

var form = Sys.Process("vfp8").Form("SCREEN");
var button = form.FindChild("Caption",param,100);

Подозреваю, что тормоза из-за того, что вы используете глубину поиска 100. Попробуйте свести это число к минимуму. Например, если вы точно знаете, что между Form("SCREEN") и Button(caption_кнопки) всего 1 контейнер, то используйте глубину поиска 1. Если не более 2х контейнеров - 2 и т.п.
  • 1

#4 mdv121314

mdv121314

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

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Matyunin Denis
  • Город:Moscow


Отправлено 21 ноября 2011 - 06:05

var form = Sys.Process("vfp8").Form("SCREEN");
var button = form.FindChild("Caption",param,100);

Подозреваю, что тормоза из-за того, что вы используете глубину поиска 100. Попробуйте свести это число к минимуму. Например, если вы точно знаете, что между Form("SCREEN") и Button(caption_кнопки) всего 1 контейнер, то используйте глубину поиска 1. Если не более 2х контейнеров - 2 и т.п.



При использовании Flat модели у меня действительно только 1 контейнер, изменил глубину до 1, на выполнение функции уходит 4 секунды, до этого от 30 секунд до минуты, т.ч. проблема решена!

Как-же это я сам не дошел :(

Большое спасибо!
  • 0


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

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