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); } }
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; }
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; }
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); }
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)); }
public int ExecuteCode(Instance instance, IZennoPosterProjectModel project) { var bot = new TestBot(instance, project); bot.Instance.ActiveTab.Navigate("ya.ru"); return(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)); }
/// <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)); }
public TestBot(ZennoLab.CommandCenter.Instance instance, IZennoPosterProjectModel project) : base(instance, project) { }
public browser_pref(Instance instance, IZennoPosterProjectModel project) { this.instance = instance; this.project = project; }
public instance_proxy(Instance instance, IZennoPosterProjectModel project) { this.instance = instance; this.project = project; }
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); }
/// <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 }
public static IZennoPosterProjectModel Info(this IZennoPosterProjectModel project, string message, bool showInPoster = true) { project.SendInfoToLog(message, showInPoster); return(project); }
public void BadEnd(Instance instance, IZennoPosterProjectModel project) { }
public ZPHelper(IZennoPosterProjectModel project, bool debugMode = true) : this(project, null, BrowserType.WithoutBrowser, debugMode) { }
/// <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); }
public int ExecuteCode(Instance instance, IZennoPosterProjectModel project) { project.SendInfoToLog("Test"); return(0); }
public source(IZennoPosterProjectModel project) { this.project = project; }
/// <summary> /// Метод для запуска выполнения скрипта /// </summary> /// <param name="instance">Объект инстанса выделеный для данного скрипта</param> /// <param name="project">Объект проекта выделеный для данного скрипта</param> /// <returns>Код выполнения скрипта</returns> public int ExecuteCode(Instance instance, IZennoPosterProjectModel project) { int executionResult = 0; return(executionResult); }