Skip to content

Commit 2f13d97

Browse files
committed
#10 merge from master
2 parents 4851c5b + 26c1389 commit 2f13d97

File tree

12 files changed

+184
-36
lines changed

12 files changed

+184
-36
lines changed

Aquality.Selenium/src/Aquality.Selenium/Configurations/Configuration.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ private Configuration()
1515
var settings = GetSettings();
1616
BrowserProfile = new BrowserProfile(settings);
1717
TimeoutConfiguration = new TimeoutConfiguration(settings);
18+
LoggerConfiguration = new LoggerConfiguration(settings);
1819
}
1920

2021
private JsonFile GetSettings()
@@ -26,7 +27,9 @@ private JsonFile GetSettings()
2627

2728
public IBrowserProfile BrowserProfile { get; }
2829

29-
public ITimeoutConfiguration TimeoutConfiguration { get; }
30+
public ITimeoutConfiguration TimeoutConfiguration { get; }
31+
32+
public ILoggerConfiguration LoggerConfiguration { get; }
3033

3134
/// <summary>
3235
/// Gets thread-safe instance of configuration.

Aquality.Selenium/src/Aquality.Selenium/Configurations/IConfiguration.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,11 @@ public interface IConfiguration
1616
/// </summary>
1717
/// <value>Configuration of timeouts.</value>
1818
ITimeoutConfiguration TimeoutConfiguration { get; }
19+
20+
/// <summary>
21+
/// Gets configuration of logger.
22+
/// </summary>
23+
/// <value>Configuration of logger.</value>
24+
ILoggerConfiguration LoggerConfiguration { get; }
1925
}
2026
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using Aquality.Selenium.Localization;
2+
3+
namespace Aquality.Selenium.Configurations
4+
{
5+
/// <summary>
6+
/// Describes logger configuration.
7+
/// </summary>
8+
public interface ILoggerConfiguration
9+
{
10+
/// <summary>
11+
/// Gets language of framework.
12+
/// </summary>
13+
/// <value>Supported language.</value>
14+
SupportedLanguage Language { get; }
15+
}
16+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using Aquality.Selenium.Localization;
2+
using Aquality.Selenium.Logging;
3+
using Aquality.Selenium.Utilities;
4+
using System;
5+
6+
namespace Aquality.Selenium.Configurations
7+
{
8+
/// <summary>
9+
/// Provides logger configuration.
10+
/// </summary>
11+
public class LoggerConfiguration : ILoggerConfiguration
12+
{
13+
private readonly JsonFile settingsFile;
14+
15+
/// <summary>
16+
/// Instantiates class using JSON file with general settings.
17+
/// </summary>
18+
/// <param name="settingsFile">JSON settings file.</param>
19+
public LoggerConfiguration(JsonFile settingsFile)
20+
{
21+
this.settingsFile = settingsFile;
22+
}
23+
24+
public SupportedLanguage Language
25+
{
26+
get
27+
{
28+
var loggerLang = settingsFile.GetValueOrDefault<string>(".logger.language");
29+
if (!Enum.TryParse<SupportedLanguage>(loggerLang, ignoreCase: true, result: out var language))
30+
{
31+
Logger.Instance.Warn($"Provided logger language '{loggerLang}' is not supported.");
32+
}
33+
return language;
34+
}
35+
}
36+
}
37+
}

Aquality.Selenium/src/Aquality.Selenium/Localization/LocalizationManager.cs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
using System;
1+
using Aquality.Selenium.Configurations;
2+
using Aquality.Selenium.Logging;
3+
using Aquality.Selenium.Utilities;
4+
using System;
5+
using System.Reflection;
26

37
namespace Aquality.Selenium.Localization
48
{
@@ -7,13 +11,14 @@ namespace Aquality.Selenium.Localization
711
/// </summary>
812
internal sealed class LocalizationManager
913
{
10-
private const string DefLocale = "en";
11-
private const string LocaleKey = "locale";
12-
private const string LangResources = "Resources.Localization.{0}.json";
14+
private const string LangResource = "Resources.Localization.{0}.json";
15+
private readonly JsonFile localManager;
1316
private static readonly Lazy<LocalizationManager> LazyInstance = new Lazy<LocalizationManager>(() => new LocalizationManager());
14-
17+
1518
private LocalizationManager()
16-
{
19+
{
20+
var language = Configuration.Instance.LoggerConfiguration.Language;
21+
localManager = new JsonFile(string.Format(LangResource, language.ToString().ToLower()), Assembly.GetCallingAssembly());
1722
}
1823

1924
/// <summary>
@@ -29,7 +34,14 @@ private LocalizationManager()
2934
/// <returns>Localized message.</returns>
3035
public string GetLocalizedMessage(string messageKey, params string [] args)
3136
{
32-
throw new NotImplementedException();
37+
var jsonKey = $"$['{messageKey}']";
38+
if (localManager.IsValuePresent(jsonKey))
39+
{
40+
return string.Format(localManager.GetValue<string>(jsonKey), args);
41+
}
42+
43+
Logger.Instance.Debug($"Cannot find localized message by key '{jsonKey}'");
44+
return default;
3345
}
3446
}
3547
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
namespace Aquality.Selenium.Localization
22
{
33
/// <summary>
4-
/// Supported locale.
4+
/// Supported language.
55
/// </summary>
6-
internal enum SupportedLocale
6+
public enum SupportedLanguage
77
{
8-
RU,
9-
EN
8+
EN,
9+
RU
1010
}
1111
}
Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,58 @@
11
{
22
"loc.baseform.unknown.type": "Неизвестный тип локатора для страницы '{0}'",
3-
"loc.baseform.null.pageinfo": "Не установлено значение атрибута PageInfo для формы '{0}'. Установите это значение или используйте конструктор с параметрами."
4-
}
3+
"loc.baseform.null.pageinfo": "Не установлено значение атрибута PageInfo для формы '{0}'. Установите это значение или используйте конструктор с параметрами.",
4+
"loc.browser.arguments.setting": "Установка стартовых аргументов браузера из JSON файла: {0}",
5+
"loc.browser.back": "Возврат на предыдущую страницу",
6+
"loc.browser.forward": "Перейти на следующую страницу",
7+
"loc.browser.caps.setting": "Установка capabilities браузера из JSON файла: {0}",
8+
"loc.browser.config.setting": "Установка настроек браузера из JSON файла: {0}",
9+
"loc.browser.driver.quit": "Закрытие драйвера браузера",
10+
"loc.browser.getUrl": "Получение ссылки текущей страницы",
11+
"loc.browser.grid": "Установка драйвера браузера из Selenium Grid хаба",
12+
"loc.browser.grid.fail": "Ошибка при получении драйвера из Selenium Grid хаба",
13+
"loc.browser.maximize": "Открытие браузера на всё окно",
14+
"loc.browser.name.wrong": "Неверное имя браузера.",
15+
"loc.browser.navigate": "Переход на страницу - '{0}'",
16+
"loc.browser.page.timeout": "Таймаут загрузки страницы",
17+
"loc.browser.ready": "Браузер '{0}' готов...",
18+
"loc.browser.refresh": "Обновление страницы",
19+
"loc.browser.alert.fail": "Не удалось обработать всплывающее окно",
20+
"loc.element.wasnotfoundinstate": "Элемент '{0}' в состоянии {1} не найден в течении {2} секунд",
21+
"loc.button": "Кнопка",
22+
"loc.checkbox": "Чекбокс",
23+
"loc.checkbox.check": "Отметка '{0}' {1} со значением: {2}",
24+
"loc.checkbox.get.state": "Получение состояния",
25+
"loc.checkbox.uncheck": "Снятие отметки '{0}' {1} со значением: {2}",
26+
"loc.clicking": "Клик",
27+
"loc.clicking.double": "Двойной Клик",
28+
"loc.clicking.js": "Клик через Javascript",
29+
"loc.clicking.right": "Клик правой кнопкой",
30+
"loc.combobox": "Комбобокс",
31+
"loc.combobox.select.by.text": "Выбор значения с текстом '{0}'",
32+
"loc.combobox.get.values": "Получение списка значений",
33+
"loc.el.getattr": "Получение аттрибута '{0}'",
34+
"loc.file.reading_exception": "Исключение при чтении файла: '{0}'%n",
35+
"loc.focusing": "Взятие элемента в фокус",
36+
"loc.get.text": "Получение текста элемента",
37+
"loc.get.text.js": "Получение текста элемента (при помощи JavaScript)",
38+
"loc.hover.js": "Наведение курсора на элемент (при помощи JavaScript)",
39+
"loc.is.present.js": "Присутствует (с помощью JavaScript)",
40+
"loc.label": "Надпись",
41+
"loc.link": "Ссылка",
42+
"loc.moving": "Наведение курсора на элемент",
43+
"loc.radio": "Радиокнопка",
44+
"loc.scrolling.center.js": "Скроллинг в центр (при помощи JavaScript)",
45+
"loc.scrolling.js": "Скроллинг с помощью JavaScript",
46+
"loc.selecting.value": "Выбор значения",
47+
"loc.send.text": "Ввод текста - '{0}'",
48+
"loc.setting.value": "Установка значения",
49+
"loc.text.clearing": "Очистка",
50+
"loc.text.field": "Текстовое поле",
51+
"loc.text.sending.keys": "Нажатие клавиши '{0}'",
52+
"loc.text.typing": "Ввод текста '{0}'",
53+
"loc.text.masked_value": "********",
54+
"loc.waitexists": "Ожидаем появления элемента в DOM",
55+
"loc.waitinstate": "Ожидание присутствия элемента в состоянии {0} используя локатор: {1}",
56+
"loc.waitinvisible": "Ожидаем пока элемент исчезнет",
57+
"loc.waitnotexists": "Ожидаем исчезновения элемента из DOM в течении {0}"
58+
}

Aquality.Selenium/src/Aquality.Selenium/Resources/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,8 @@
7474
"timeoutScript": 10,
7575
"timeoutPageLoad": 15,
7676
"timeoutPollingInterval": 300
77+
},
78+
"logger": {
79+
"language": "en"
7780
}
7881
}

Aquality.Selenium/src/Aquality.Selenium/Utilities/JsonFile.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.ComponentModel;
66
using System.IO;
77
using System.Linq;
8+
using System.Reflection;
89

910
namespace Aquality.Selenium.Utilities
1011
{
@@ -37,6 +38,16 @@ public JsonFile(string resourceFileName)
3738
fileContent = FileReader.GetTextFromResource(resourceFileName);
3839
}
3940

41+
/// <summary>
42+
/// Inistantiates class using desired embeded resource.
43+
/// </summary>
44+
/// <param name="embededResourceName">Embeded resource name</param>
45+
/// <param name="assembly">Assembly which resource belongs to</param>
46+
public JsonFile(string embededResourceName, Assembly assembly)
47+
{
48+
fileContent = FileReader.GetTextFromEmbeddedResource(embededResourceName, assembly);
49+
}
50+
4051
/// <summary>
4152
/// Gets value from JSON.
4253
/// Note that the value can be overriden via Environment variable with the same name

Aquality.Selenium/tests/Aquality.Selenium.Tests/Resources/settings.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"download.prompt_for_download": "false",
1919
"download.default_directory": "//home//selenium//downloads"
2020
},
21-
"startArguments": ["--headless"]
21+
"startArguments": [ "--headless" ]
2222
},
2323
"firefox": {
2424
"webDriverVersion": "Latest",
@@ -64,5 +64,8 @@
6464
"timeoutScript": 10,
6565
"timeoutPageLoad": 15,
6666
"timeoutPollingInterval": 300
67+
},
68+
"logger": {
69+
"language": "en"
6770
}
6871
}

0 commit comments

Comments
 (0)