summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMavlushechka <mavlushechka@gmail.com>2022-11-01 22:21:39 +0500
committerMavlushechka <mavlushechka@gmail.com>2022-11-01 22:21:39 +0500
commit417d0364d12557bf2725660fcb77db80ffa906ff (patch)
treeb9d8300af3e402f6d71e285c6c8e7366b76b21cf
Framework initialization
-rw-r--r--.gitignore17
-rw-r--r--Dockerfile68
-rw-r--r--pom.xml46
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java7
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java13
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java25
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java9
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java22
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java25
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/IntegerUtils.java21
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java94
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/LoggerUtils.java46
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java43
-rw-r--r--src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java50
-rw-r--r--src/main/resources/config.json18
-rw-r--r--src/main/resources/log4j2.xml23
-rw-r--r--src/main/resources/settings.json118
-rw-r--r--src/main/resources/testData.json3
-rw-r--r--src/test/java/com/mavlushechka/a1qa/framework/BaseTest.java22
-rw-r--r--src/test/java/com/mavlushechka/a1qa/project/TestCase1.java13
20 files changed, 683 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d70d1d1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+### Java ###
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### Docker ###
+docker-compose.yml
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+out/
+target/
+!**/src/main/**/out/
+!**/src/test/**/out/ \ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..80da933
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,68 @@
+# This image prepares war-container with ready application
+FROM maven:3.5.3-jdk-8 as builder
+
+# Defining args for reading from docker-compose file
+ARG GIT_USR
+ARG GIT_PWD
+
+# Defining environment variables
+ENV PROJECT_NAME task-sources
+ENV GIT_USR "$GIT_USR"
+ENV GIT_PWD "$GIT_PWD"
+ENV GIT_DOMAIN github.com
+ENV GIT_PROJECT_PATH a1qa-education-exam/$PROJECT_NAME.git
+ENV GIT_REPO=https://$GIT_USR:$GIT_PWD@$GIT_DOMAIN/$GIT_PROJECT_PATH
+
+# Creating working directory for Maven
+RUN mkdir -p "$MAVEN_HOME"
+WORKDIR $MAVEN_HOME
+
+# Installing Git
+RUN apt-get -y update && apt-get -y install git
+
+# Cloning project repository
+RUN git clone $GIT_REPO
+
+# Packaging project into war-containers
+RUN mvn clean package -f ${MAVEN_HOME}/${PROJECT_NAME}/pom.xml
+
+# This image deploying application on Tomcat
+FROM tomcat:7-jre8
+
+# Defining environment variables
+ENV PROJECT_NAME task-sources
+ENV MODULE_NAME_DB union_reporting
+ENV MODULE_NAME union-reporting
+ENV TOMCAT_USER login
+ENV TOMCAT_PASSWORD password
+ENV TOMCAT_ROLE testportalrole
+ENV DB_PORT 3306
+ENV DB_URL jdbc:mysql://db:${DB_PORT}/${MODULE_NAME_DB}
+
+ENV TOMCAT_USERS_XML <role rolename="\"${TOMCAT_ROLE}\""/> <user username="\"${TOMCAT_USER}\"" password="\"${TOMCAT_PASSWORD}\"" roles="\"${TOMCAT_ROLE}\""/> </tomcat-users>
+ENV TOMCAT_CONTEXT_XML <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name='"jdbc/mysql"' auth='"Container"' type='"javax.sql.DataSource"' maxTotal='"100"' maxIdle='"30"' maxWaitMillis='"10000"' username="\"${TOMCAT_USER}\"" password="\"${TOMCAT_PASSWORD}\"" driverClassName='"com.mysql.jdbc.Driver"' url="\"${DB_URL}\""/> </Context>
+
+# Setting maintainer for the image
+MAINTAINER Artyom Ryazantsev
+
+# Creating working directory for Tomcat
+RUN mkdir -p "$CATALINA_HOME"
+WORKDIR $CATALINA_HOME
+
+# Deleting default ROOT-app on Tomcat
+RUN rm -r ${CATALINA_HOME}/webapps/ROOT
+
+# Installing rpl tool
+RUN apt-get update && apt-get -y install rpl
+
+# Replacing required configuration data on Tomcat
+RUN rpl '</tomcat-users>' "${TOMCAT_USERS_XML}" ${CATALINA_HOME}/conf/tomcat-users.xml
+RUN rpl '</Context>' "${TOMCAT_CONTEXT_XML}" ${CATALINA_HOME}/conf/context.xml
+
+# Deploying the application (web and api parts) on Tomcat
+COPY --from=builder /usr/share/maven/${PROJECT_NAME}/${MODULE_NAME}-api/target/api.war ${CATALINA_HOME}/webapps/api.war
+COPY --from=builder /usr/share/maven/${PROJECT_NAME}/${MODULE_NAME}-web/target/web.war ${CATALINA_HOME}/webapps/web.war
+
+EXPOSE 8080
+
+CMD ["catalina.sh" , "run"]
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..21edb71
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>com.mavlushechka.a1qa</groupId>
+ <artifactId>task3</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.github.aquality-automation</groupId>
+ <artifactId>aquality-selenium</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>7.6.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ <version>20220924</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>2.10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <version>2.19.0</version>
+ </dependency>
+ </dependencies>
+
+ <properties>
+ <maven.compiler.source>18</maven.compiler.source>
+ <maven.compiler.target>18</maven.compiler.target>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+</project> \ No newline at end of file
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java b/src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java
new file mode 100644
index 0000000..85316c9
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java
@@ -0,0 +1,7 @@
+package com.mavlushechka.a1qa.framework.constants;
+
+public enum RequestMethod {
+
+ GET, POST
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java b/src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java
new file mode 100644
index 0000000..63fbc9a
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java
@@ -0,0 +1,13 @@
+package com.mavlushechka.a1qa.framework.constants;
+
+public enum Status {
+
+ OK(200), CREATED(201), NOT_FOUND(404);
+
+ public final int code;
+
+ Status(int code) {
+ this.code = code;
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java b/src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java
new file mode 100644
index 0000000..6584879
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java
@@ -0,0 +1,25 @@
+package com.mavlushechka.a1qa.framework.pages;
+
+import aquality.selenium.elements.interfaces.IElement;
+import aquality.selenium.elements.interfaces.ILabel;
+
+public abstract class BaseForm {
+
+ private final IElement uniqueElement;
+ private final String name;
+
+
+ public BaseForm(ILabel uniqueElement, String name) {
+ this.uniqueElement = uniqueElement;
+ this.name = name;
+ }
+
+ public boolean isOpened() {
+ return uniqueElement.getElement().isDisplayed();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java
new file mode 100644
index 0000000..1865715
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java
@@ -0,0 +1,9 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+public class DoubleUtils {
+
+ public static double getPercentageOf(double number, double percentage) {
+ return number / 100 * percentage;
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java
new file mode 100644
index 0000000..40ea62d
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java
@@ -0,0 +1,22 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+public class FileParser {
+
+ public static String parse(String filename) {
+ StringBuilder stringBuilder = new StringBuilder();
+
+ try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) {
+ while (bufferedReader.ready()) {
+ stringBuilder.append(bufferedReader.readLine());
+ }
+ } catch (IOException ioException) {
+ throw new IllegalArgumentException("Cannot find required file.");
+ }
+ return stringBuilder.toString();
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java
new file mode 100644
index 0000000..cfa0628
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java
@@ -0,0 +1,25 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+import com.mavlushechka.a1qa.framework.constants.RequestMethod;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class HttpUrlConnectionFactory {
+
+ private HttpUrlConnectionFactory() {
+ }
+
+ public static HttpURLConnection createHttpUrlConnection(String spec, RequestMethod requestMethod, boolean doOutput) throws IOException {
+ HttpURLConnection httpUrlConnection = (HttpURLConnection) new URL(spec).openConnection();
+
+ httpUrlConnection.setRequestMethod(requestMethod.name());
+ httpUrlConnection.setConnectTimeout(Integer.parseInt(JsonParser.parseData("config", "httpUrlConnection.connectTimeout")));
+ httpUrlConnection.setReadTimeout(Integer.parseInt(JsonParser.parseData("config", "httpUrlConnection.readTimeout")));
+ httpUrlConnection.setDoOutput(doOutput);
+ httpUrlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
+ return httpUrlConnection;
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/IntegerUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/IntegerUtils.java
new file mode 100644
index 0000000..76280cc
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/IntegerUtils.java
@@ -0,0 +1,21 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+import java.util.OptionalInt;
+import java.util.Random;
+
+public class IntegerUtils {
+
+ private IntegerUtils() {
+ }
+
+ public static int getRandomNumber(int min, int max) {
+ OptionalInt randomNumber = new Random().ints(min, max).findFirst();
+
+ if (randomNumber.isPresent()) {
+ return randomNumber.getAsInt();
+ }
+ LoggerUtils.error("Incorrect min and max arguments.");
+ throw new IllegalArgumentException("Incorrect min and max arguments.");
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java
new file mode 100644
index 0000000..4f89e12
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java
@@ -0,0 +1,94 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+import com.google.gson.Gson;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class JsonParser {
+
+ private final static TreeMap<String, JSONObject> parsedJSON = new TreeMap<>();
+
+
+ public static String parseData(String filename, String key) {
+ return parse(filename, key, false);
+ }
+
+ public static String parseObject(String filename, String key) {
+ return parse(filename, key, true);
+ }
+
+ public static boolean isJson(String json) {
+ try {
+ new JSONObject(json);
+ } catch (JSONException jsonObjectException) {
+ try {
+ new JSONArray(json);
+ } catch (JSONException jsonArrayException) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static boolean isBodyEmpty(String json) {
+ return json.equals("{}");
+ }
+
+ public static <T> T convertToObject(String json, Class<T> classToConvert) {
+ return new Gson().fromJson(json, classToConvert);
+ }
+
+ public static <T> String convertToJson(T object) {
+ return new Gson().toJson(object);
+ }
+
+ public static <T> T[] convertArray(String json, Class<T> classToConvert) {
+ Gson gson = new Gson();
+ JSONArray jsonArray = new JSONArray(json);
+ ArrayList<T> objects = new ArrayList<>();
+
+ for (int i = 0; i < jsonArray.length(); i++) {
+ objects.add(gson.fromJson(jsonArray.getJSONObject(i).toString(), classToConvert));
+ }
+ return (T[]) objects.toArray();
+ }
+
+ private static String parse(String filename, String key, boolean isObject) {
+ Map.Entry<String, JSONObject> ceilingEntry = parsedJSON.ceilingEntry(filename);
+
+ if (ceilingEntry == null || !ceilingEntry.getKey().startsWith(filename)) {
+ parseFile(filename);
+ }
+ return parseData(filename, key, isObject);
+ }
+
+ private static void parseFile(String filename) {
+ parsedJSON.put(filename, new JSONObject(FileParser.parse("src/main/resources/" + filename + ".json")));
+ }
+
+ private static String parseData(String jsonName, String key, boolean isObject) {
+ JSONObject jsonObject = new JSONObject(parsedJSON.get(jsonName).toString());
+ String[] keys = key.split("\\.");
+
+ for (int i = 0; i < keys.length - 1; i++) {
+ if (keys[i].contains("[") && keys[i].contains("]")) {
+ String splitKey = keys[i].split("\\[")[0];
+ int index = Integer.parseInt(keys[i].split("\\[")[1].replaceAll("[\\[\\]]", ""));
+
+ jsonObject = jsonObject.getJSONArray(splitKey).getJSONObject(index);
+ } else {
+ jsonObject = jsonObject.getJSONObject(keys[i]);
+ }
+ }
+ if (isObject) {
+ return jsonObject.getJSONObject(keys[keys.length - 1]).toString();
+ }
+ return jsonObject.getString(keys[keys.length - 1]);
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/LoggerUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/LoggerUtils.java
new file mode 100644
index 0000000..8675d92
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/LoggerUtils.java
@@ -0,0 +1,46 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.config.ConfigurationSource;
+import org.apache.logging.log4j.core.config.Configurator;
+import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+public class LoggerUtils {
+
+ private final static File CONFIGURATION_FILE = new File("src/main/resources/log4j2.xml");
+ private static Logger logger;
+ private static int step = 0;
+
+
+ private LoggerUtils() {
+ }
+
+ public static void initialize() {
+ try {
+ Configurator.initialize(new XmlConfiguration(null, new ConfigurationSource(new FileInputStream(CONFIGURATION_FILE))));
+ } catch (IOException ioException) {
+ throw new RuntimeException(ioException);
+ }
+ logger = LogManager.getLogger();
+ }
+
+ public static void step(String text) {
+ step++;
+ info("Step %d: %s".formatted(step, text));
+ }
+
+ public static void info(String text) {
+ logger.log(Level.INFO, text);
+ }
+
+ public static void error(String text) {
+ logger.log(Level.ERROR, text);
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java
new file mode 100644
index 0000000..ae699d1
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java
@@ -0,0 +1,43 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+import java.util.Random;
+
+public class StringUtils {
+
+ private StringUtils() {
+ }
+
+ public static String convertToConstantCase(String text) {
+ StringBuilder stringBuilder = new StringBuilder();
+ String[] words = text.split(" ");
+
+ for (int i = 0; i < words.length; i++) {
+ stringBuilder.append(words[i].toUpperCase());
+ if (i != words.length - 1) {
+ stringBuilder.append("_");
+ }
+ }
+
+ return stringBuilder.toString();
+ }
+
+ public static String capitalizeFirstLetter(String text) {
+ return text.substring(0, 1).toUpperCase() + text.substring(1);
+ }
+
+ public static int removeNonDigits(String text) {
+ return Integer.parseInt(text.replaceAll("[^0-9]+", ""));
+ }
+
+ public static String generateRandomText(int lettersLowerBound, int lettersUpperBound, int length) {
+ return new Random().ints(lettersLowerBound, lettersUpperBound + 1)
+ .limit(length)
+ .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
+ .toString();
+ }
+
+ public static String replaceByStars(String text) {
+ return "*".repeat(text.length());
+ }
+
+}
diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java
new file mode 100644
index 0000000..b8dad83
--- /dev/null
+++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java
@@ -0,0 +1,50 @@
+package com.mavlushechka.a1qa.framework.utils;
+
+import com.mavlushechka.a1qa.framework.constants.RequestMethod;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+
+public class UrlConnectionManager {
+
+ public static String get(String spec) throws IOException {
+ StringBuilder stringBuilder = new StringBuilder();
+
+ try (BufferedReader bufferedReader = new BufferedReader(
+ new InputStreamReader(HttpUrlConnectionFactory.createHttpUrlConnection(spec, RequestMethod.GET, false).getInputStream()))
+ ) {
+ String inputLine;
+
+ while ((inputLine = bufferedReader.readLine()) != null) {
+ stringBuilder.append(inputLine);
+ }
+ }
+ return stringBuilder.toString();
+ }
+
+ public static String post(String spec, String content) throws IOException {
+ HttpURLConnection httpUrlConnection = HttpUrlConnectionFactory.createHttpUrlConnection(spec, RequestMethod.POST, true);
+ StringBuilder stringBuilder = new StringBuilder();
+
+ try (DataOutputStream dataOutputStream = new DataOutputStream(httpUrlConnection.getOutputStream())) {
+ dataOutputStream.writeBytes(content);
+ dataOutputStream.flush();
+ }
+ try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream()))) {
+ String inputLine;
+
+ while ((inputLine = bufferedReader.readLine()) != null) {
+ stringBuilder.append(inputLine);
+ }
+ }
+ return stringBuilder.toString();
+ }
+
+ public static int getResponseCode(String spec, RequestMethod requestMethod) throws IOException {
+ return HttpUrlConnectionFactory.createHttpUrlConnection(spec, requestMethod, false).getResponseCode();
+ }
+
+}
diff --git a/src/main/resources/config.json b/src/main/resources/config.json
new file mode 100644
index 0000000..efac2e4
--- /dev/null
+++ b/src/main/resources/config.json
@@ -0,0 +1,18 @@
+{
+ "browser": {
+ "url": "http://localhost:8080"
+ },
+ "randomTextGenerator": {
+ "lettersLowerBound": "97",
+ "lettersUpperBound": "122",
+ "length": "10"
+ },
+ "integerUtils": {
+ "randomNumberMin": "0",
+ "randomNumberMax": "101"
+ },
+ "httpUrlConnection": {
+ "connectTimeout": "5000",
+ "readTimeout": "5000"
+ }
+} \ No newline at end of file
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..756a521
--- /dev/null
+++ b/src/main/resources/log4j2.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="INFO">
+ <Appenders>
+ <Console name="consoleAppender" target="SYSTEM_OUT">
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+ </Console>
+ <File name="fileAppender" fileName="target/logFile.log">
+ <PatternLayout>
+ <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
+ </PatternLayout>
+ </File>
+ </Appenders>
+ <Loggers>
+ <Logger name="FILE_APPENDER"
+ level="INFO" additivity="false">
+ <AppenderRef ref="fileAppender" />
+ </Logger>
+ <Root level="TRACE">
+ <AppenderRef ref="consoleAppender"/>
+ <AppenderRef ref="fileAppender"/>
+ </Root>
+ </Loggers>
+</Configuration> \ No newline at end of file
diff --git a/src/main/resources/settings.json b/src/main/resources/settings.json
new file mode 100644
index 0000000..4e41432
--- /dev/null
+++ b/src/main/resources/settings.json
@@ -0,0 +1,118 @@
+{
+ "browserName" : "firefox",
+ "isRemote": false,
+ "remoteConnectionUrl": "http://localhost:4444/wd/hub",
+ "isElementHighlightEnabled" : true,
+
+ "driverSettings": {
+ "chrome": {
+ "webDriverVersion": "latest",
+ "capabilities": {
+ },
+ "options": {
+ "intl.accept_languages": "en",
+ "safebrowsing.enabled": "true",
+ "profile.default_content_settings.popups": "0",
+ "disable-popup-blocking": "true",
+ "download.prompt_for_download": "false",
+ "download.default_directory": "//home//selenium//downloads"
+ },
+ "pageLoadStrategy": "Normal",
+ "startArguments": []
+ },
+ "edge": {
+ "webDriverVersion": "latest",
+ "capabilities": {
+ },
+ "options": {
+ "intl.accept_languages": "en",
+ "safebrowsing.enabled": "true",
+ "profile.default_content_settings.popups": "0",
+ "disable-popup-blocking": "true",
+ "download.prompt_for_download": "false",
+ "download.default_directory": "//home//selenium//downloads"
+ },
+ "startArguments": []
+ },
+ "firefox": {
+ "webDriverVersion": "latest",
+ "capabilities": {
+ },
+ "options": {
+ "intl.accept_languages": "en",
+ "browser.download.dir": "//home//selenium//downloads",
+ "browser.download.folderList": 2,
+ "browser.helperApps.neverAsk.saveToDisk": "application/octet-stream, application/x-debian-package, application/x-www-form-urlencod, application/json, application/x-compressed, application/x-zip-compressed, application/zip, multipart/x-zip, text/plain, text/csv",
+ "browser.helperApps.alwaysAsk.force": false,
+ "browser.download.manager.alertOnEXEOpen": false,
+ "browser.download.manager.focusWhenStarting": false,
+ "browser.download.useDownloadDir": true,
+ "browser.download.manager.showWhenStarting": false,
+ "browser.download.manager.closeWhenDone": true,
+ "browser.download.manager.showAlertOnComplete": false,
+ "browser.download.manager.useWindow": false,
+ "browser.download.panel.shown": false
+ },
+ "startArguments": ["--private", "--kiosk"]
+ },
+ "iexplorer": {
+ "webDriverVersion": "latest",
+ "systemArchitecture": "X32",
+ "capabilities": {
+ "ignoreProtectedModeSettings": true
+ }
+ },
+ "opera": {
+ "webDriverVersion": "latest",
+ "binaryLocation": "%USERPROFILE%\\AppData\\Local\\Programs\\Opera\\launcher.exe",
+ "capabilities": {
+ },
+ "options": {
+ "intl.accept_languages": "en",
+ "safebrowsing.enabled": "true",
+ "profile.default_content_settings.popups": "0",
+ "disable-popup-blocking": "true",
+ "download.prompt_for_download": "false",
+ "download.default_directory": "./downloads"
+ },
+ "startArguments": ["--remote-debugging-port=9222", "--no-sandbox", "--disable-dev-shm-usage"]
+ },
+ "safari": {
+ "downloadDir": "/Users/username/Downloads"
+ },
+ "yandex": {
+ "webDriverVersion": "102.0.5005.61",
+ "binaryLocation": "%USERPROFILE%\\AppData\\Local\\Yandex\\YandexBrowser\\Application\\browser.exe",
+ "capabilities": {
+ },
+ "options": {
+ "intl.accept_languages": "en",
+ "safebrowsing.enabled": "true",
+ "profile.default_content_settings.popups": "0",
+ "disable-popup-blocking": "true",
+ "download.prompt_for_download": "false",
+ "download.default_directory": "./downloads"
+ },
+ "startArguments": []
+ }
+ },
+ "timeouts": {
+ "timeoutImplicit" : 0,
+ "timeoutCondition" : 30,
+ "timeoutScript" : 10,
+ "timeoutPageLoad" : 15,
+ "timeoutPollingInterval": 300,
+ "timeoutCommand":120
+ },
+ "retry": {
+ "number": 2,
+ "pollingInterval": 300
+ },
+ "logger": {
+ "language": "en",
+ "logPageSource": true
+ },
+ "elementCache": {
+ "isEnabled": false
+ }
+} \ No newline at end of file
diff --git a/src/main/resources/testData.json b/src/main/resources/testData.json
new file mode 100644
index 0000000..0e0dcd2
--- /dev/null
+++ b/src/main/resources/testData.json
@@ -0,0 +1,3 @@
+{
+
+} \ No newline at end of file
diff --git a/src/test/java/com/mavlushechka/a1qa/framework/BaseTest.java b/src/test/java/com/mavlushechka/a1qa/framework/BaseTest.java
new file mode 100644
index 0000000..c4240d5
--- /dev/null
+++ b/src/test/java/com/mavlushechka/a1qa/framework/BaseTest.java
@@ -0,0 +1,22 @@
+package com.mavlushechka.a1qa.framework;
+
+import aquality.selenium.browser.AqualityServices;
+import com.mavlushechka.a1qa.framework.utils.JsonParser;
+import com.mavlushechka.a1qa.framework.utils.LoggerUtils;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeSuite;
+
+public class BaseTest {
+
+ @BeforeSuite
+ public void setUp() {
+ LoggerUtils.initialize();
+ AqualityServices.getBrowser().goTo(JsonParser.parseData("config", "browser.url"));
+ }
+
+ @AfterTest
+ public void tearDown() {
+ AqualityServices.getBrowser().quit();
+ }
+
+}
diff --git a/src/test/java/com/mavlushechka/a1qa/project/TestCase1.java b/src/test/java/com/mavlushechka/a1qa/project/TestCase1.java
new file mode 100644
index 0000000..599e651
--- /dev/null
+++ b/src/test/java/com/mavlushechka/a1qa/project/TestCase1.java
@@ -0,0 +1,13 @@
+package com.mavlushechka.a1qa.project;
+
+import com.mavlushechka.a1qa.framework.BaseTest;
+import org.testng.annotations.Test;
+
+public class TestCase1 extends BaseTest {
+
+ @Test
+ public void test1() {
+
+ }
+
+}