Protopuch / raccoon-frontend

Raccoon - calculator with API. Frontend
Apache License 2.0
2 stars 0 forks source link

Selenium #9

Open Protopuch opened 5 years ago

Protopuch commented 5 years ago

Разобран принцип работы Selenium. Установлены библиотеки и драйвера дря работы приложения. Написан простой тест для кукликера (тап печеньки и апгрейдов, данные получали по ID объекта).

Protopuch commented 5 years ago

Ниже приведен листинг кода:

package main;

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; //import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) throws Exception {

    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().pageLoadTimeout(10000, TimeUnit.MILLISECONDS);

    driver.get("http://orteil.dashnet.org/cookieclicker/");

    By elementLocator = By.id("bigCookie");
    click50times(driver, elementLocator);
    TimeUnit.SECONDS.sleep(1);

    WebElement cursor = driver.findElement(By.id("product0"));

}

private static int click50times(WebDriver driver, By elementLocator) {
    WebElement element = driver.findElement(elementLocator);

    String elem;

    int g=0;
    int lim = 200;
    do{
        element.click();
        g++;

        driver.findElements(By.className("enabled")).stream()
                .filter(e -> e.getAttribute("id").contains("product"))
                .forEach(e -> e.click());
    } while (g<lim);
    return lim;
}

private static void assertEquals(String expected, String actual, String message) throws Exception
{
    if (!expected.equals(actual))
    {
        throw new Exception(message);
    }
}

}

Protopuch commented 5 years ago

Переработан и усовершенствован тест кликера. Использование объектов, которые появляются со временем. package main;

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver;

import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit;

public class Test {

public static void main(String[] args) throws Exception {

    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().pageLoadTimeout(10000, TimeUnit.MILLISECONDS);

    driver.get("http://orteil.dashnet.org/cookieclicker/");

    By elementLocator = By.id("bigCookie");
    runClicks(driver, elementLocator);
    TimeUnit.SECONDS.sleep(1);

}

private static int runClicks(WebDriver driver, By elementLocator) throws InterruptedException {
    WebElement element = driver.findElement(elementLocator);

    Thread.sleep(3000);
    List<String> localUpgrades = getLocalUpgrades(driver);
    //-----------------------------------

    int g=0;
    int lim = 5000;
    int count = 1;
    do{
        element.click();
        g++;

        int koef = 10 * count + 1;
        System.out.println("g   :" + g + "\nkoef:" + koef);
        if (g% koef == 0) {
            System.out.println("UPGRADE");
            count = buyUpgrades(driver, getGlobalUpgrades(driver, "upgrade"), count, true);
            count = buyUpgrades(driver, localUpgrades, count, false);
        }
    } while (g<lim);
    return lim;
}

private static int buyUpgrades(WebDriver driver, List<String> upgradeIds, int count, boolean stopAfterFirstUpgrade) {
    for (int i = 0; i < upgradeIds.size(); i++) {
        WebElement upgrade = driver.findElement(By.id(upgradeIds.get(i)));
        if (upgrade.getAttribute("class").contains("enabled")) {
            String id = upgrade.getAttribute("id");
            upgrade.click();
            count++;
            System.out.println("Purchased " + id);
            if (stopAfterFirstUpgrade) {
                return count;
            }
        }
    }
    return count;
}

private static List<String> getGlobalUpgrades(WebDriver driver, String className) {
    List<WebElement> achif = driver.findElements(By.className(className));
    List<String> globalUpgrades = new ArrayList<>();
    for (int i = 0; i < achif.size(); i++) {
        WebElement globalUpgrade = achif.get(i);
        if (globalUpgrade.getAttribute("id").contains(className)) {
            globalUpgrades.add(globalUpgrade.getAttribute("id"));
        }
    }
    return globalUpgrades;
}

private static List<String> getLocalUpgrades(WebDriver driver) {
    List<String> upgrades = getGlobalUpgrades(driver, "product");
    Collections.reverse(upgrades);
    return upgrades;
}

}

Protopuch commented 5 years ago

Далее необходимо все обернуть в объектную модель, через наследование от общего класса.