std::vector<std::string> split(const std::string str, char delimiter = ' ') {
std::vector<std::string> result;
result.reserve(str.size());
int start = 0, end = 0;
for (const auto& c: str) {
if (c != delimiter) {
++end;
continue;
}
result.push_back(str.substr(start, end - start));
start = ++end;
}
if (start <= str.size()) {
result.push_back(str.substr(start, end - start));
}
return result;
}
#ifndef WEBDRIVERXX_WEBDRIVER_H
#define WEBDRIVERXX_WEBDRIVER_H
#include "client.h"
#include "session.h"
namespace webdriverxx {
// The main class for interactions with a server. Automatically connects to a server,
// creates and deletes a session and gives access to session's API.
class WebDriver // copyable
: public Client
, public Session {
public:
explicit WebDriver(
const Capabilities& desired = Capabilities(),
const Capabilities& required = Capabilities(),
const std::string& url = kDefaultWebDriverUrl
)
: Client(url)
, Session(CreateSession(desired, required))
{}
};
inline
WebDriver Start(
const Capabilities& desired,
const Capabilities& required = Capabilities(),
const std::string& url = kDefaultWebDriverUrl
)
{
return WebDriver(desired, required, url);
}
inline
WebDriver Start(const Capabilities& desired, const std::string& url)
{
return Start(desired, Capabilities(), url);
}
} // namespace webdriverxx
#endif
/**
* @brief Описывает текущий исполняемый файл. Буть то исполняемый файл или библиотека расширения.
*
*/
class ТекущийЗапущенныйОбъект : Машинный::Filesystem::File
{
МашинныйОднозначныйКласс( ТекущийЗапущенныйОбъект, {
std::cout << "\tПервичный путь до исполняемого объекта : " << ПолучитьПервичныйПуть()
<< "\n\tРеальный путь до исполняемого объекта : " << ПолучитьРеальныйПуть()
<< "\n\tДинамическая библиотека? " << ЯвляетсяЛиДинамическойБиблиотекой() << std::endl;
}, : Машинный::Filesystem::File(ПолучитьРеальныйПуть()) );
/**
* объявление рефлексии класса
*/
#define МашинныйОпределениеПсевдоСамоанализаКласса(NAME, КОД_ПЕРЕЧНЯ_МЕТОДОВ) \
public: \
virtual \
inline const std::string названиеКласса() { return НазваниеКласса(); } \
static \
inline const std::string НазваниеКласса() { return #NAME; } \
private: \
МашинныйОбъявлениеСтатическогоБлокаКласса(NAME); \
static Рефлексия::СписокДанныхОФункциях __Список_Методов_Класса; \
public: \
static \
inline Машинный::Types::ullong СамоанализПолучитьКоличествоДоступныхМетодов() { return __Список_Методов_Класса.size(); } \
static \
inline void ВывестиИнформациюОМетодах() { \
for (auto [названиеМетода, укаатель, параметры] : NAME :: __Список_Методов_Класса) \
{ \
std::cout << названиеМетода << ", " << параметры << std::endl; \
} \
} \
private: \
СтатическийБлокКодаКлассаИницциализацияВЗаглавии(КОД_ПЕРЕЧНЯ_МЕТОДОВ); \
public: \
static bool ИмеетЛиКлассСредстваСамоанализа() {return true;}
#define СтатическийБлокКодаКлассаИницциализацияВЗаглавии(КОД_ИНИЦИАЛИЗАЦИИ) \
private: \
static inline struct _sst__ ## __COUNTER__ { \
_sst__ ## __COUNTER__ () \
{ \
{RunOnceBlockCode(HEADBEGIN, КОД_ИНИЦИАЛИЗАЦИИ) ;} \
} \
} static_initial{};
../Исходники/Машинный/База/Файлы/ТекущийЗапущенныйОбъект.hpp:16:3: note: in expansion of macro ‘МашинныйОднозначныйКласс’
16 | МашинныйОднозначныйКласс( ТекущийЗапущенныйОбъект, {
| ^~~~~~~~~~~~~~~~~~~~~~~~
../Исходники/Машинный/Определения/Типы Данных/../Уловки Кода.hpp:33:81: error: expected primary-expression before ‘)’ token
33 | Объединить(флаг_инициализации__, Определение2Названия( НАЗВАНИЕ1, НАЗВАНИЕ2 ))
#define МашинныйОднозначныйКласс(НАЗВАНИЕ_КЛАССА, КОД_ЛОКАЛЬНОГО_КОНСТРУКТОРА, КОД_ВЫЗОВА_РОДИТЕЛЬСКОГО_КЛАССА) \
private: \
static inline НАЗВАНИЕ_КЛАССА * __однозначный = nullptr; \
public: \
static НАЗВАНИЕ_КЛАССА * ПолучитьЕдинственныйОбъектКласса() {return __однозначный;} \
~НАЗВАНИЕ_КЛАССА() {} \
НАЗВАНИЕ_КЛАССА() КОД_ВЫЗОВА_РОДИТЕЛЬСКОГО_КЛАССА {if (__однозначный != nullptr) \
throw std::exception("Невозможно создать объкт однозначного класса."); \
else { \
{ КОД_ЛОКАЛЬНОГО_КОНСТРУКТОРА; } } } \
МашинныйОпределениеПсевдоСамоанализаКласса(НАЗВАНИЕ_КЛАССА, {__однозначный = new НАЗВАНИЕ_КЛАССА ();})
#define ОпределениеНазвания(НАЗВАНИЕ) Объединить(_с__Машинный__, НАЗВАНИЕ)
#define Определение2Названия(НАЗВАНИЕ1, НАЗВАНИЕ2) \
ОпределениеНазвания(Объединить(Объединить(НАЗВАНИЕ1, _), НАЗВАНИЕ2))
#define НФлагИнициализации(НАЗВАНИЕ1, НАЗВАНИЕ2) \
Объединить(флаг_инициализации__, Определение2Названия( НАЗВАНИЕ1, НАЗВАНИЕ2 ))
../Исходники/Машинный/Сеть/Автоматы/SeleniumАвтоматизация.hpp: In static member function ‘static bool Машинный::Интернет::Автоматы::SeleniumАвтоматизация::СтатическиИнициализированныйSeleniumАвтоматизацияКласс()’:
../Исходники/Машинный/Определения/Типы Данных/../Уловки Кода.hpp:33:69: error: expected primary-expression before ‘,’ token
33 | Объединить(флаг_инициализации__, Определение2Названия( НАЗВАНИЕ1, НАЗВАНИЕ2 ))
| ^
../Исходники/Машинный/Сеть/Автоматы/../../База/Журнал.hpp: In static member function ‘static bool Журнал::СтатическиИнициализированныйЖурналКласс()’:
../Исходники/Машинный/Определения/Типы Данных/../Уловки Кода.hpp:30:59: error: expected primary-expression before ‘,’ token
30 | флаг_инициализации__ ## Определение2Названия(НАЗВАНИЕ1, НАЗВАНИЕ2)
#define МашинныйОпределениеПсевдоСамоанализаКлассаРеализация(НАЗВАНИЕ_КЛАССА, БЛОК_КОДА) \
Рефлексия::СписокДанныхОФункциях НАЗВАНИЕ_КЛАССА ## ::__Список_Методов_Класса; \
МашинныйРеализацияСтатическогоБлокаИнициализацииКласса(НАЗВАНИЕ_КЛАССА, БЛОК_КОДА);