public ZennoLoggerProvider(IZennoPosterProjectModel zennoProject, Func <string, LogLevel, bool, bool> filter,
                            Func <object, Exception, string> formatter = null)
 {
     _zennoProject = zennoProject;
     _filter       = filter;
     _formatter    = formatter;
 }
        public void WriteInfo(LogLevel logLevel, object title, object message, bool showInPoster = true)
        {
            if (title == null)
            {
                title = "▫";
            }
            if (message == null)
            {
                message = "▫";
            }

            IZennoPosterProjectModel project = _z.Project;

            switch (logLevel)
            {
            case LogLevel.Normal:
                project.SendInfoToLog(message.ToString(), title.ToString(), showInPoster);
                break;

            case LogLevel.Warning:
                project.SendWarningToLog(message.ToString(), title.ToString(), showInPoster);
                break;

            case LogLevel.Error:
                project.SendErrorToLog(message.ToString(), title.ToString(), showInPoster);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(logLevel), logLevel, nameof(logLevel));
            }
        }
 public static void WaitRun(IZennoPosterProjectModel project,string TaskName)
 {
     int nt = GetNumberOfTries(TaskName);
   string status = GetStatus(TaskName);
   while( nt >0 )
   {    
     if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return; // Прерывание в ZP
     if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return; // Прерывание в PM
     
       Thread.Sleep(3000);
     
       nt = TaskHelper.GetNumberOfTries(TaskName);
     status = GetStatus(TaskName);
     
     switch (status)
     {
       case "Perform":
         break;
       case "Complite": nt = 0;
         break;
       case "Stop": nt = 0;
         break;
       case "Schedule":
         break;
       case "WaitPerform":
         break;
     }
     
       project.SendInfoToLog("Ожидаем завершения "+TaskName,true);   
   }
 }
Exemple #4
0
        public int ExecuteCode(ZennoLab.CommandCenter.Instance instance, IZennoPosterProjectModel project)
        {
            var ctx = new TestContext(instance, project);

            //ctx.Elements.LoginPage.LoginBtn.ScrollIntoView().WithoutLogging().GetValue();
            return(1);
        }
        private void SetLogOptions([PathReference] string path, bool separateLog = true)
        {
            IZennoPosterProjectModel project = _z.Project;

            project.LogOptions.LogFile          = path;
            project.LogOptions.SplitLogByThread = separateLog;
        }
Exemple #6
0
 public ZennoLogger(IZennoPosterProjectModel project, string name, Func <string, LogLevel, bool, bool> filter = null,
                    Func <object, Exception, string> formatter = null)
 {
     _name      = string.IsNullOrEmpty(name) ? nameof(ZennoLogger) : name;
     _project   = project;
     _filter    = filter;
     _formatter = formatter;
 }
Exemple #7
0
        public TestContext(ZennoLab.CommandCenter.Instance instance, IZennoPosterProjectModel project) : base(instance, project)
        {
            Configuration.IsAutoWaitDownloadingEnabled = true;
            LoginPage = new LoginPage(this);

            var keysAndXpaths = XmlParser.GetKeysAndXPaths(@"D:\Dev\ZennoFramework\XmlParser\SiteData\Elements.xml");
            //Elements = new Elements<Element>(this, keysAndXpaths);
        }
Exemple #8
0
 public static ILoggerFactory AddZenno(this ILoggerFactory factory, IZennoPosterProjectModel project,
                                       LogLevel minLevel = LogLevel.Trace, LogLevel zennoPosterMinLevel = LogLevel.Info,
                                       Func <object, Exception, string> formatter = null)
 {
     return(AddZenno(factory, project,
                     (_, logLevel, isPoster) => isPoster ? logLevel >= zennoPosterMinLevel : logLevel >= minLevel,
                     formatter));
 }
Exemple #9
0
        public int ExecuteCode(Instance instance, IZennoPosterProjectModel project)
        {
            var bot = new TestBot(instance, project);

            bot.Instance.ActiveTab.Navigate("ya.ru");

            return(0);
        }
Exemple #10
0
        public int ExecuteCode(Instance instance, IZennoPosterProjectModel project)
        {
            var helper = new ZPHelper.ZPHelper(project, instance, BrowserType.Firefox45, true);

            helper.Browser.OpenSite("https://github.com/ZennoHelpers/ZPHelper");

            return(0);
        }
        /// <summary>
        /// Инициализация подключения к SQLite базе данных (дополнительные параметры connection string в виде словаря)
        /// </summary>
        /// <param name="database_path">полный путь к файлу базы данных</param>
        /// <param name="zp_project">объект project из Zenno</param>
        /// <param name="add_to_connection_string">словарь "ключ" => "значение" дополнительных параметров, добавляемых к connection string</param>
        /// <param name="throw_exc_on_errors">выдавать ли исключение в случае ошибки или просто по-тихому писать в лог ZP</param>
        /// <param name="show_log_in_poster">показывать ли ошибку в логе ZennoPoster (в случае false - сообщение будет отображено только в ProjectMaker)</param>
        /// <returns>удалось ли подключиться к БД</returns>
        public static bool Init(string database_path, IZennoPosterProjectModel zp_project, Dictionary <string, string> add_to_connection_string, bool throw_exc_on_errors = true, bool show_log_in_poster = false)
        {
            List <string> addition_lst = new List <string>();

            foreach (KeyValuePair <string, string> data in add_to_connection_string)
            {
                addition_lst.Add(String.Format("{0}={1}", data.Key, data.Value));
            }
            string addition_str = String.Join(";", addition_lst);

            return(Init(database_path, zp_project, addition_str, throw_exc_on_errors, show_log_in_poster));
        }
Exemple #12
0
        /// <summary>
        /// Инициализирует новый экземпляр <see cref="BotContext"/>.
        /// </summary>
        /// <param name="instance">Экземпляр инстанса браузера <see cref="ZennoLab.CommandCenter.Instance"/>.</param>
        /// <param name="project">Экземпляр модели проекта <see cref="IZennoPosterProjectModel"/>.</param>
        /// <param name="loggerFactory">Фабрика логеров. Необязательный параметр.</param>
        public BotContext(ZennoLab.CommandCenter.Instance instance, IZennoPosterProjectModel project,
                          ILoggerFactory loggerFactory = null)
        {
            Check.NotNull(instance, nameof(instance));
            Project = Check.NotNull(project, nameof(project));

            Configuration = new BotContextConfiguration();
            Interception  = new Interception.Interception();

            loggerFactory = loggerFactory ?? new LoggerFactory();
            Configure(loggerFactory);
            Logger = loggerFactory.CreateLogger(GetType().Name);

            Instance = instance.ToExtended(this);
        }
        /// <summary>
        /// Инициализация подключения к SQLite базе данных
        /// </summary>
        /// <param name="database_path">полный путь к файлу базы данных</param>
        /// <param name="zp_project">объект project из Zenno</param>
        /// <param name="add_to_connection_string">строка дополнительных параметров, добавляемых к connection string</param>
        /// <param name="throw_exc_on_errors">выдавать ли исключение в случае ошибки или просто по-тихому писать в лог ZP</param>
        /// <param name="show_log_in_poster">показывать ли ошибку в логе ZennoPoster (в случае false - сообщение будет отображено только в ProjectMaker)</param>
        /// <returns>удалось ли подключиться к БД</returns>
        public static bool Init(string database_path, IZennoPosterProjectModel zp_project, string add_to_connection_string = "", bool throw_exc_on_errors = true, bool show_log_in_poster = false)
        {
            project         = zp_project;
            throw_on_errors = throw_exc_on_errors;
            show_in_poster  = show_log_in_poster;

            string connection_string = String.Empty;

            try {
                connection_string        = string.Format("Data Source={0};", database_path);
                add_to_connection_string = add_to_connection_string.Trim().TrimEnd(new char[] { ';' });
                if (!String.IsNullOrEmpty(add_to_connection_string))
                {
                    connection_string = String.Concat(connection_string, add_to_connection_string, ";");
                }

                if (!File.Exists(database_path))
                {
                    SQLiteConnection.CreateFile(database_path);
                }
                connection = new SQLiteConnection(connection_string);
                connection.Open();

                return(true);
            } catch (Exception exc) {
                string current_method_name = MethodBase.GetCurrentMethod().Name;
                string msg = GenerateErrorMessage(String.Format("Ошибка подключения к БД: {0}", exc.Message), current_method_name);
                msg = String.Format("{0}. Строка подключения: {1}", msg, connection_string);

                if (throw_on_errors)
                {
                    throw new FastSqliteHelperException(msg, exc);
                }
                else
                {
                    SendToLog(msg, LogType.LogError);
                }

                return(false);
            }
        }
        public ZPHelper(IZennoPosterProjectModel project, Instance instance, BrowserType browserType = BrowserType.Firefox52, bool debugMode = true)
        {
            Project     = project;
            BrowserType = browserType;
            Instance    = instance;

            // Общий рандом
            Rnd = new Random(Guid.NewGuid().GetHashCode());

            // Остальное
            TaskManager = new TaskManager(this);

            Log = new LogHelper(
                zpHelper: this,
                debugMode: debugMode,
                debugLogType: LogLevel.Normal,
                showDebugInPoster: true);

            Logic = new LogicHelper(
                zpHelper: this,
                pauseMinMax: (2000, 3000));
        }
Exemple #15
0
 public TestBot(ZennoLab.CommandCenter.Instance instance, IZennoPosterProjectModel project) : base(instance, project)
 {
 }
Exemple #16
0
 public browser_pref(Instance instance, IZennoPosterProjectModel project)
 {
     this.instance = instance;
     this.project  = project;
 }
Exemple #17
0
 public instance_proxy(Instance instance, IZennoPosterProjectModel project)
 {
     this.instance = instance;
     this.project  = project;
 }
Exemple #18
0
 public static ILoggerFactory AddZenno(this ILoggerFactory factory, IZennoPosterProjectModel project,
                                       Func <string, LogLevel, bool, bool> filter, Func <object, Exception, string> formatter = null)
 {
     factory.AddProvider(new ZennoLoggerProvider(project, filter, formatter));
     return(factory);
 }
Exemple #19
0
 /// <summary>
 /// BadEnd
 /// </summary>
 /// <param name="instance">Объект инстанса выделеный для данного скрипта</param>
 /// <param name="project">Объект проекта выделеный для данного скрипта</param>
 public void BadEnd(Instance instance, IZennoPosterProjectModel project)
 {
     // TODO insert your code of BadEnd here
 }
Exemple #20
0
 public static IZennoPosterProjectModel Info(this IZennoPosterProjectModel project, string message, bool showInPoster = true)
 {
     project.SendInfoToLog(message, showInPoster);
     return(project);
 }
Exemple #21
0
 public void BadEnd(Instance instance, IZennoPosterProjectModel project)
 {
 }
 public ZPHelper(IZennoPosterProjectModel project, bool debugMode = true)
     : this(project, null, BrowserType.WithoutBrowser, debugMode)
 {
 }
Exemple #23
0
        /// <summary>
        /// Метод для запуска выполнения скрипта
        /// </summary>
        /// <param name="instance">Объект инстанса выделеный для данного скрипта</param>
        /// <param name="project">Объект проекта выделеный для данного скрипта</param>
        /// <returns>Код выполнения скрипта</returns>
        public int ExecuteCode(Instance instance, IZennoPosterProjectModel project)
        {
            // Открыть страницу Яндекса и прогрузить ее
            Tab tab = instance.ActiveTab;

            if ((tab.IsVoid) || (tab.IsNull))
            {
                return(-1);
            }
            if (tab.IsBusy)
            {
                tab.WaitDownloading();
            }
            tab.Navigate("https://yandex.ru/");
            if (tab.IsBusy)
            {
                tab.WaitDownloading();
            }

            // Выбрать из файла случайную ключевую фразу для запроса
            Random r = new Random();

            string[] string_array  = File.ReadAllLines(@"C:\zapros.txt", Encoding.Default);
            string   random_string = string_array[r.Next(0, string_array.Length)];

            // Определить на странице строку поиска
            HtmlElement input_search = tab.FindElementByXPath("//input[@class='input__control input__input']", 0);

            if (input_search.IsVoid)
            {
                return(-2);
            }

            // Определить на странице кнопку Найти
            HtmlElement find_button = tab.FindElementByXPath("//button[contains(@class,'button')]", 0);

            if (find_button.IsVoid)
            {
                return(-2);
            }

            // Ввести ключевую фразу в строку поиска
            input_search.SetValue(random_string, instance.EmulationLevel, false);
            instance.WaitFieldEmulationDelay();

            // Кликнуть на кнопку Найти
            find_button.RiseEvent("click", instance.EmulationLevel);
            if (tab.IsBusy)
            {
                tab.WaitDownloading();
            }

            // Задать количество переходов по страницам с результами поиска
            for (int i = 0; i < 11; i++)
            {
                // Определить на странице результаты поиска и поместить в список
                HtmlElementCollection results_search = tab.FindElementsByXPath("//div[@class='organic__url-text']");
                if (results_search.IsVoid)
                {
                    return(-2);
                }

                // Кликнуть на случайную ссылку поисковой выдачи
                results_search.Elements[r.Next(0, results_search.Count - 1)].RiseEvent("click", instance.EmulationLevel);

                // Работать с табом, открывшимся по ссылке
                Tab tab2 = instance.ActiveTab;
                if (tab2.IsBusy)
                {
                    tab2.WaitDownloading();
                }
                System.Threading.Thread.Sleep(2000);
                tab2.Close();

                // Определить на странице кнопку Дальше для перехода на след. страницу с результатами поиска
                HtmlElement next_button = tab.FindElementByXPath("//a[contains(@class,'pager__item_kind_next')]", 0);
                if (next_button.IsVoid)
                {
                    return(-2);
                }

                // Кликнуть по кнопке Дальше для перехода на след. страницу с результатами поиска
                next_button.RiseEvent("click", instance.EmulationLevel);
            }

            return(0);
        }
Exemple #24
0
        public int ExecuteCode(Instance instance, IZennoPosterProjectModel project)
        {
            project.SendInfoToLog("Test");

            return(0);
        }
Exemple #25
0
 public source(IZennoPosterProjectModel project)
 {
     this.project = project;
 }
Exemple #26
0
        /// <summary>
        /// Метод для запуска выполнения скрипта
        /// </summary>
        /// <param name="instance">Объект инстанса выделеный для данного скрипта</param>
        /// <param name="project">Объект проекта выделеный для данного скрипта</param>
        /// <returns>Код выполнения скрипта</returns>
        public int ExecuteCode(Instance instance, IZennoPosterProjectModel project)
        {
            int executionResult = 0;

            return(executionResult);
        }