Исправлен селектор Gender и Month
This commit is contained in:
@ -258,101 +258,38 @@ public class GoogleRegistrationHandler
|
||||
int year = userData.getBirthYear() > 1900 ? userData.getBirthYear() : 1980 + random.nextInt(30);
|
||||
typeWithRandomDelay(yearInput, String.valueOf(year));
|
||||
|
||||
// Месяц (кастомный дропдаун)
|
||||
// Месяц (теперь обычный <select>)
|
||||
try {
|
||||
WebElement monthDropdown = null;
|
||||
try {
|
||||
monthDropdown = driver.findElement(By.xpath("//div[@role='combobox'][.//span[text()='Month']]"));
|
||||
} catch (Exception e) {
|
||||
List<WebElement> comboboxes = driver.findElements(By.xpath("//div[@role='combobox']"));
|
||||
if (!comboboxes.isEmpty()) {
|
||||
monthDropdown = comboboxes.get(0);
|
||||
}
|
||||
}
|
||||
if (monthDropdown == null) {
|
||||
logger.error("Не удалось найти дропдаун месяца!");
|
||||
makeScreenshot("month_dropdown_not_found");
|
||||
} else {
|
||||
logger.info("Найден дропдаун месяца: {}", monthDropdown.getAttribute("outerHTML"));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", monthDropdown);
|
||||
Thread.sleep(500);
|
||||
// Ищем ul с опциями только для месяца
|
||||
WebElement monthList = null;
|
||||
try {
|
||||
monthList = monthDropdown.findElement(By.xpath("following-sibling::div/ul"));
|
||||
} catch (Exception e) {
|
||||
logger.error("Не удалось найти ul с опциями месяца: {}", e.getMessage());
|
||||
makeScreenshot("month_ul_not_found");
|
||||
}
|
||||
final int selectedMonth = userData.getBirthMonth() > 0 ? userData.getBirthMonth() : 1 + random.nextInt(12);
|
||||
List<WebElement> monthOptions = monthList != null ? monthList.findElements(By.cssSelector("li[role='option'][data-value]")) : List.of();
|
||||
WebElement monthOption = monthOptions.stream().filter(opt -> String.valueOf(selectedMonth).equals(opt.getAttribute("data-value"))).findFirst().orElse(null);
|
||||
if (monthOption == null && !monthOptions.isEmpty()) {
|
||||
monthOption = monthOptions.get(random.nextInt(monthOptions.size()));
|
||||
logger.warn("Не найден нужный месяц, выбран случайный: {}", monthOption.getText());
|
||||
}
|
||||
if (monthOption != null) {
|
||||
logger.info("Кликаю по опции месяца: {}", monthOption.getAttribute("outerHTML"));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", monthOption);
|
||||
} else {
|
||||
logger.error("Не удалось найти ни одного варианта месяца!");
|
||||
makeScreenshot("month_dropdown_not_found");
|
||||
}
|
||||
}
|
||||
WebElement monthSelect = findElementWithWait(By.cssSelector("select#month"));
|
||||
org.openqa.selenium.support.ui.Select select = new org.openqa.selenium.support.ui.Select(monthSelect);
|
||||
int selectedMonth = userData.getBirthMonth() > 0 ? userData.getBirthMonth() : 1 + random.nextInt(12);
|
||||
select.selectByValue(String.valueOf(selectedMonth));
|
||||
logger.info("Выбран месяц: {}", selectedMonth);
|
||||
} catch (Exception e) {
|
||||
logger.error("Ошибка при выборе месяца: {}", e.getMessage());
|
||||
makeScreenshot("month_dropdown_error");
|
||||
makeScreenshot("month_select_error");
|
||||
}
|
||||
|
||||
// Пол (кастомный дропдаун)
|
||||
// Пол (тоже обычный <select>)
|
||||
try {
|
||||
WebElement genderDropdown = null;
|
||||
try {
|
||||
genderDropdown = driver.findElement(By.xpath("//div[@role='combobox'][.//span[text()='Gender']]"));
|
||||
} catch (Exception e) {
|
||||
List<WebElement> comboboxes = driver.findElements(By.xpath("//div[@role='combobox']"));
|
||||
if (comboboxes.size() > 1) {
|
||||
genderDropdown = comboboxes.get(1);
|
||||
}
|
||||
WebElement genderSelect = findElementWithWait(By.cssSelector("select#gender"));
|
||||
org.openqa.selenium.support.ui.Select select = new org.openqa.selenium.support.ui.Select(genderSelect);
|
||||
String genderValue = null;
|
||||
if (userData.getGender() != null) {
|
||||
if (userData.getGender().toString().equals("MALE")) genderValue = "1";
|
||||
else if (userData.getGender().toString().equals("FEMALE")) genderValue = "2";
|
||||
// Можно добавить обработку других вариантов
|
||||
}
|
||||
if (genderDropdown == null) {
|
||||
logger.error("Не удалось найти дропдаун пола!");
|
||||
makeScreenshot("gender_dropdown_not_found");
|
||||
} else {
|
||||
logger.info("Найден дропдаун пола: {}", genderDropdown.getAttribute("outerHTML"));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", genderDropdown);
|
||||
Thread.sleep(500);
|
||||
// Ищем ul с опциями только для пола
|
||||
WebElement genderList = null;
|
||||
try {
|
||||
genderList = genderDropdown.findElement(By.xpath("following-sibling::div/ul"));
|
||||
} catch (Exception e) {
|
||||
logger.error("Не удалось найти ul с опциями пола: {}", e.getMessage());
|
||||
makeScreenshot("gender_ul_not_found");
|
||||
}
|
||||
final String genderValue;
|
||||
if (userData.getGender() != null) {
|
||||
genderValue = userData.getGender().toString().equals("MALE") ? "1" : (userData.getGender().toString().equals("FEMALE") ? "2" : null);
|
||||
} else {
|
||||
genderValue = null;
|
||||
}
|
||||
List<WebElement> genderOptions = genderList != null ? genderList.findElements(By.cssSelector("li[role='option'][data-value]")) : List.of();
|
||||
WebElement genderOption = genderOptions.stream().filter(opt -> genderValue != null && genderValue.equals(opt.getAttribute("data-value"))).findFirst().orElse(null);
|
||||
if (genderOption == null && !genderOptions.isEmpty()) {
|
||||
genderOption = genderOptions.get(random.nextInt(genderOptions.size()));
|
||||
logger.warn("Не найден нужный пол, выбран случайный: {}", genderOption.getText());
|
||||
}
|
||||
if (genderOption != null) {
|
||||
logger.info("Кликаю по опции пола: {}", genderOption.getAttribute("outerHTML"));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", genderOption);
|
||||
} else {
|
||||
logger.error("Не удалось найти ни одного варианта пола!");
|
||||
makeScreenshot("gender_dropdown_not_found");
|
||||
}
|
||||
if (genderValue == null) {
|
||||
// Если не определено — выбираем случайный вариант (1 или 2)
|
||||
genderValue = String.valueOf(1 + random.nextInt(2));
|
||||
logger.warn("Не определён пол, выбран случайный: {}", genderValue);
|
||||
}
|
||||
select.selectByValue(genderValue);
|
||||
logger.info("Выбран пол: {}", genderValue);
|
||||
} catch (Exception e) {
|
||||
logger.error("Ошибка при выборе пола: {}", e.getMessage());
|
||||
makeScreenshot("gender_dropdown_error");
|
||||
makeScreenshot("gender_select_error");
|
||||
}
|
||||
|
||||
// Нажимаем кнопку "Next"
|
||||
@ -1230,14 +1167,14 @@ public class GoogleRegistrationHandler
|
||||
// Пробуем JS
|
||||
try
|
||||
{
|
||||
((JavascriptExecutor) driver).executeScript(
|
||||
((JavascriptExecutor) driver).executeScript(
|
||||
"Array.from(document.querySelectorAll('button')).find(el => el.textContent.includes('Confirm')).click();");
|
||||
logger.info("Нажата кнопка 'Confirm' через JavaScript");
|
||||
sleep(2000);
|
||||
sleep(2000);
|
||||
takeScreenshot(driver, "after_confirm_js");
|
||||
}
|
||||
catch (Exception jsEx)
|
||||
{
|
||||
}
|
||||
catch (Exception jsEx)
|
||||
{
|
||||
logger.info("Кнопка 'Confirm' не найдена и через JavaScript: {}", jsEx.getMessage());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user