что есть instance.ActiveTab?

Alekseyaz

Client
Регистрация
20.11.2014
Сообщения
162
Благодарностей
30
Баллы
28
что есть instance.ActiveTab?

После
Tab tab = instance.ActiveTab;
tab.FullEmulationMouseClick("left", "click");

tab уже не таб и не указывает на активный таб
приходится дергать это свойство по новой.

Эти куски отрабатывают по разному

Tab tab = instance.ActiveTab;
tab.FullEmulationMouseClick("left", "click");
// открывается новая вкладка
tab.FindElementByXPath("//*[@href='" "']", 0);


Tab tab = instance.ActiveTab;
tab.FullEmulationMouseClick("left", "click");
// открывается новая вкладка
instance.ActiveTab.FindElementByXPath("//*[@href='" "']", 0);

После каждого перехода нужно инициализировать активный таб?
 

Alekseyaz

Client
Регистрация
20.11.2014
Сообщения
162
Благодарностей
30
Баллы
28
И заметил что Tab tab = instance.ActiveTab; ресурсная операция.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113

Alekseyaz

Client
Регистрация
20.11.2014
Сообщения
162
Благодарностей
30
Баллы
28
Активная вкладка.


Tab tab = instance.ActiveTab;
Сама переменная tab после клика и перехода на новую вкладку на что ссылается?
Просто обратил внимание что надо по новой брать свойство через get

public Tab ActiveTab
{
get
{
_errorDetected = false;
if (!IsVoid)
{
string message = CommandTransfer.CreateMessage(Address, "Instance_ActiveTab", "", "");
bool errorDetected;
return ZPConverter.ConvertToTab(Transfer.SendMessageWait(message, out errorDetected), Address, Transfer, errorDetected, out _errorDetected);
}
_errorDetected = true;
return Tab.GetNull();
}
}

так как оно изменило состояние или еще что то
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Я в шарпе не очень. Сказал что знаю, лучше дождатся того, кто более компетентен в данном вопросе.
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
Нет не нужно, каждый раз инициализировать (в пределах одного кубика), данная конструкция,

Tab tab = instance.ActiveTab;

лишь сокращение, для последующего использования, к примеру:

tab.FullEmulationMouseClick("left", "click");

То есть, можно писать и так:
instance.ActiveTab.FullEmulationMouseClick("left", "click");

Что означает, клик левой кнопкой мыши в активной вкладки. Два основных класса в ZP, это project и instance.
 
Последнее редактирование:
  • Спасибо
Реакции: Mikhail B.

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
что есть instance.ActiveTab?
Это есть обращение к свойству объекта типа https://help.zennolab.com/en/v5/zennoposter/5.5/ZennoLab.CommandCenter~ZennoLab.CommandCenter.Instance.html

instance это основной объект класса ZennoLab.CommandCenter.Instance через который идет взаимодействие с браузером и выполнение каких то действий.
Данный объект уникален для каждого потока, при запуске шаблона.

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


И заметил что Tab tab = instance.ActiveTab; ресурсная операция.
Если это вопрос, то слишком абстрактен. Этот объект итак занимает N памяти, обращение именно к этому свойству никаких особо задержек не дает, если вопрос в этом плане.

Эти куски отрабатывают по разному

Tab tab = instance.ActiveTab;
tab.FullEmulationMouseClick("left", "click");
// открывается новая вкладка
tab.FindElementByXPath("//*[@href='" "']", 0);
Эти "куски" это выполнение метода FullEmulationMouseClick() и естественно в зависимости от того что передано в качестве параметров можно ожидать каких либо действий.
Плюс тк это эмуляция передвижения мышки, то можно ожидать что это займет N времени, это так и задумывалось - типа повторить действия юзера.

После каждого перехода нужно инициализировать активный таб?
Если придираться к словам, то инициализация это "вбив" каких то данных при создании объекта определенного класса, типа для удобства.
В данном случае это понятие не применимо к заданному вопросу.
Здесь просто идет обращение к свойству объекта и получения какой то информации.
И да, это относится именно к активному табу - вкладке в текущий момент.
Если есть необходимость обратиться к другим табам открытым в текущий момент, то это делается через соответствующие методы/свойства.

PS. Порекомендовал бы изучить модель основных классов - instance, project. Какие методы/свойства есть, и что они делают.
Если будут непонятки, то всегда можно задать вопрос на форуме, и получить компетентный ответ, при условии, что вопрос задан в дружелюбной форме.:-)
 

Alekseyaz

Client
Регистрация
20.11.2014
Сообщения
162
Благодарностей
30
Баллы
28
В общем проверил не раз, таб после tab.FullEmulationMouseClick("left", "click") если открывается новая вкладка таб сбивается и надо опять инициализировать переменную tab = instance.ActiveTab;
иначе
heCol = tab.FindElementsByXPath("//*[contains(text(),'"+ login + "')]");
например уже не находит элементы.
Можете проверить на поле ввода пароля логина яндекс почты.
Вот и сокращай после этого...
 

Alekseyaz

Client
Регистрация
20.11.2014
Сообщения
162
Благодарностей
30
Баллы
28
Я так понимаю это синглтон, что там происходит когда гетером дергаем свойство одному богу и разрабам известно.
Операция эта затратная, скопировать адрес объекта в куче не занимает 32 ms
Новый точечный рисунок (4).jpg
 

Alekseyaz

Client
Регистрация
20.11.2014
Сообщения
162
Благодарностей
30
Баллы
28
Если придираться к словам, то инициализация это "вбив" каких то данных при создании объекта определенного класса, типа для удобства.
В данном случае это понятие не применимо к заданному вопросу.
Здесь просто идет обращение к свойству объекта и получения какой то информации.
И да, это относится именно к активному табу - вкладке в текущий момент.
Если есть необходимость обратиться к другим табам открытым в текущий момент, то это делается через соответствующие методы/свойства.
В том то и дело что свойства в net можем обернуть модификаторами доступа, а там описать отдельную логику. Свойства в net это по сути метод, при сборке они превращаются в методы get_Value и там может быть все что угодно.
 
Последнее редактирование:

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
В том то и дело что свойства в net можем обернуть модификаторами доступа, а там описать отдельную логику. Свойства в net это по сути метод, при сборке они превращаются в методы get_Value и там может быть все что угодно.
Я в курсе что такое свойства. Это собственно и ответ на вопрос выше.
И заметил что Tab tab = instance.ActiveTab; ресурсная операция.
Операция эта затратная, скопировать адрес объекта в куче не занимает 32 ms
Запихнуть туда можно хоть что.
53740


Что и подтверждается. Свойство не просто возвращает переменную, а выполняется какой то метод. Собственно на это и уходит время.

В общем проверил не раз, таб после tab.FullEmulationMouseClick("left", "click") если открывается новая вкладка таб сбивается и надо опять инициализировать переменную tab = instance.ActiveTab;
Логично предположить, что если открывается новая вкладка, то она становится активной, возможно в этом все дело.
Ну тут все зависит от разработчиков, и надо потестить, чтобы точно понимать логику.
К примеру была вкладка А, она была активной, взяли ее через instance.ActiveTab и положили в переменную tab1. Дальше что то сделали, открылась новая вкладка - B, теперь уже она активная.
Вопрос, что будет в переменной tab1?
С одной стороны должен быть объект старой вкладки. С другой стороны, может быть и новой. Тк сейчас то активной стала другая вкладка, а tab1 это ссылка на объект.
Поэтому по идее может быть и то и то.))
Но учитывая скриншот выше, можно сказать что это будут разные объекты. Тк instance.ActiveTab это по сути метод, который возвращает объект вкладки, именно той, которая была активой на момент вызова этого метода/обращения к данному свойству.
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 165
Благодарностей
744
Баллы
113
В общем проверил не раз, таб после tab.FullEmulationMouseClick("left", "click") если открывается новая вкладка таб сбивается и надо опять инициализировать переменную tab = instance.ActiveTab;
иначе
Естественно. Ведь открываться новая вкладка и старая, на которую сохранена ссылка в переменной tab, перестает быть активной.
В место переменной можно создать свойство Tab Tab {retern: instance.ActiveTab }
Тогда всегда будет возвращаться активная вкладка
Я так понимаю это синглтон, что там происходит когда гетером дергаем свойство одному богу и разрабам известно.
Операция эта затратная, скопировать адрес объекта в куче не занимает 32 ms
Это только при отладке в студии. Там что то с защитой зеновских библиотек связанно
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)