diff --git a/proJect/pom.xml b/proJect/pom.xml index 8427783..0ce359a 100644 --- a/proJect/pom.xml +++ b/proJect/pom.xml @@ -16,7 +16,7 @@ org.junit.jupiter junit-jupiter-api - 5.9.2 + 5.9.2 test @@ -32,6 +32,13 @@ 5.9.2 test + + + io.appium + java-client + 7.6.0 + + \ No newline at end of file diff --git a/proJect/src/main/java/anlov/java/Factorial.java b/proJect/src/main/java/anlov/java/Factorial.java deleted file mode 100644 index 27a9dcf..0000000 --- a/proJect/src/main/java/anlov/java/Factorial.java +++ /dev/null @@ -1,15 +0,0 @@ -package anlov.java; - -public class Factorial { - - public static long getFactorial(int num) { - if (num < 0) { - throw new IllegalArgumentException("Число должно быть положительным"); - } - int factorial = 1; - for (int i = 1; i <= num; i++) { - factorial *= i; - } - return factorial; - } -} diff --git a/proJect/src/main/java/anlov/java/Main.java b/proJect/src/main/java/anlov/java/Main.java deleted file mode 100644 index c14deaa..0000000 --- a/proJect/src/main/java/anlov/java/Main.java +++ /dev/null @@ -1,10 +0,0 @@ -package anlov.java; - - -import java.util.Arrays; - -public class Main { - public static void main(String[] args) { - System.out.println(Factorial.getFactorial(3)); - } -} \ No newline at end of file diff --git a/proJect/src/main/java/anlov/java/common/BasePage.java b/proJect/src/main/java/anlov/java/common/BasePage.java new file mode 100644 index 0000000..f3ef168 --- /dev/null +++ b/proJect/src/main/java/anlov/java/common/BasePage.java @@ -0,0 +1,10 @@ +package anlov.java.common; + +import io.appium.java_client.android.AndroidDriver; +import io.appium.java_client.android.AndroidElement; + + + +public class BasePage { + protected AndroidDriver driver = InstanceDriver.getDriver(); +} \ No newline at end of file diff --git a/proJect/src/main/java/anlov/java/common/Constants.java b/proJect/src/main/java/anlov/java/common/Constants.java new file mode 100644 index 0000000..db033f9 --- /dev/null +++ b/proJect/src/main/java/anlov/java/common/Constants.java @@ -0,0 +1,5 @@ +package anlov.java.common; + +public class Constants { + public static final String useApk = "C:\\Users\\Haff\\IdeaProjects\\CourseOnJava\\proJect\\src\\test\\resources\\com.google.android.calculator-85006687.apk"; +} diff --git a/proJect/src/main/java/anlov/java/common/InstanceDriver.java b/proJect/src/main/java/anlov/java/common/InstanceDriver.java new file mode 100644 index 0000000..3deee9c --- /dev/null +++ b/proJect/src/main/java/anlov/java/common/InstanceDriver.java @@ -0,0 +1,49 @@ +package anlov.java.common; + + +import io.appium.java_client.android.AndroidDriver; +import io.appium.java_client.android.AndroidElement; +import io.appium.java_client.remote.MobileCapabilityType; +import org.openqa.selenium.remote.DesiredCapabilities; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.concurrent.TimeUnit; +public class InstanceDriver { + + private static InstanceDriver instanceDriver; + private static AndroidDriver driver; + + private InstanceDriver() { + } + + public static AndroidDriver getDriver() { + if (instanceDriver == null) { + instanceDriver = new InstanceDriver(); + } + return instanceDriver.initialize(); + } + + public static void quit() { + driver.quit(); + instanceDriver = null; + driver = null; + } + + private AndroidDriver initialize() { + if (driver == null) { + DesiredCapabilities capabilities = new DesiredCapabilities(); + capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Pixel 3A API 34"); + capabilities.setCapability(MobileCapabilityType.APP, Constants.useApk); + capabilities.setCapability(MobileCapabilityType.NO_RESET, true); + + try { + driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); + driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); + } catch (MalformedURLException e) { + System.out.println(e.getMessage()); + } + } + return driver; + } +} \ No newline at end of file diff --git a/proJect/src/main/java/anlov/java/common/MainPage.java b/proJect/src/main/java/anlov/java/common/MainPage.java new file mode 100644 index 0000000..92bf42f --- /dev/null +++ b/proJect/src/main/java/anlov/java/common/MainPage.java @@ -0,0 +1,37 @@ +package anlov.java.common; + +public class MainPage extends BasePage { + private static final String idDigLocator = "com.google.android.calculator:id/digit_"; + private static final String idCalculatLocator = "com.google.android.calculator:id/"; + + public MainPage takeExpress(String expression) { + String[] expres = expression.split(" "); + for (int i = 0; i < expres.length; i++) { + if (i % 2 == 0) driver.findElementById(idDigLocator + expres[i]).click(); + else takeOperation(expres[i]); + } + return this; + } + + private void takeOperation(String operation) { + switch (operation) { + case "+": + driver.findElementById(idCalculatLocator + "op_add").click(); + break; + case "-": + driver.findElementById(idCalculatLocator + "op_sub").click(); + break; + case "*": + driver.findElementById(idCalculatLocator + "op_mul").click(); + break; + case "/": + driver.findElementById(idCalculatLocator + "op_div").click(); + break; + } + } + + public String getResult() { + driver.findElementById(idCalculatLocator + "eq").click(); + return driver.findElementById(idCalculatLocator + "result_final").getText(); + } +} \ No newline at end of file diff --git a/proJect/src/test/java/BaseTest.java b/proJect/src/test/java/BaseTest.java new file mode 100644 index 0000000..9722743 --- /dev/null +++ b/proJect/src/test/java/BaseTest.java @@ -0,0 +1,20 @@ +import io.appium.java_client.android.AndroidDriver; +import io.appium.java_client.android.AndroidElement; +import anlov.java.common.InstanceDriver; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; + +public class BaseTest { + + protected static AndroidDriver driver; + + @BeforeAll + public static void setup() { + driver = InstanceDriver.getDriver(); + } + + @AfterAll + public static void teardown() { + InstanceDriver.quit(); + } +} \ No newline at end of file diff --git a/proJect/src/test/java/CalculatorTest.java b/proJect/src/test/java/CalculatorTest.java new file mode 100644 index 0000000..9f25dc3 --- /dev/null +++ b/proJect/src/test/java/CalculatorTest.java @@ -0,0 +1,19 @@ +import anlov.java.common.MainPage; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.openqa.selenium.support.PageFactory; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CalculatorTest extends BaseTest { + + protected MainPage mainPage = PageFactory.initElements(driver, MainPage.class); + @DisplayName("Check calculator's operations") + @ParameterizedTest + @CsvSource({"1 + 4, 5", "8 - 3, 5", "3 * 2, 6", "9 / 3, 3"}) + public void checkOperations(String expression, String expected) { + String actual = mainPage.takeExpress(expression).getResult(); + assertEquals(expected,actual); + } +} \ No newline at end of file diff --git a/proJect/src/test/java/FactorialTest.java b/proJect/src/test/java/FactorialTest.java deleted file mode 100644 index 618d24f..0000000 --- a/proJect/src/test/java/FactorialTest.java +++ /dev/null @@ -1,34 +0,0 @@ -import anlov.java.Factorial; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - - -class FactorialTest { - - @DisplayName("Check factorial if num equals 0") - @Test - void checkFactorial() { - assertEquals(1, Factorial.getFactorial(0)); - } - - @DisplayName("Check factorial if num more 0") - @ParameterizedTest - @ValueSource(ints = {1, 2, 3, 4}) - void checkMoreZero(int num) { - long[] numbers = {1, 2, 6, 24}; - assertEquals(numbers[num - 1], Factorial.getFactorial(num)); - - } - - @Test - void negativeInputShouldThrowException() { - assertThrows(IllegalArgumentException.class, - () -> Factorial.getFactorial(-5), "Число должно быть больше нуля"); - } -}