Open Protopuch opened 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);
}
}
}
Переработан и усовершенствован тест кликера. Использование объектов, которые появляются со временем. 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;
}
}
Далее необходимо все обернуть в объектную модель, через наследование от общего класса.
Разобран принцип работы Selenium. Установлены библиотеки и драйвера дря работы приложения. Написан простой тест для кукликера (тап печеньки и апгрейдов, данные получали по ID объекта).