Исправлен селектор Gender и Month

This commit is contained in:
2025-05-18 18:08:31 +03:00
parent e9cc4f7dff
commit 5a00f35bbc

View File

@ -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());
}
}