помогите с заполнением формы через C# (Месяц и пол)

Ilgiz90

Client
Регистрация
07.08.2025
Сообщения
3
Благодарностей
0
Баллы
1
месяц и пол заполняются через дропдаун с выбором месяца и пола. Нужно брать из профиля год рождения и пол и оперируясь от них спрлнить форму. Вот так выглядит сама форма
135381


Вот код с помощью которого я пытаюсь достать месяца

C#:
var driver = instance.DroidInstance.AppiumDriver;
int monthDate = project.Profile.BornMonth;
var monthList = driver.FindElementByClassName("android.widget.ListView");
var allMonths = monthList.FindElementsByClassName("android.view.View");
на строке var allMonths = monthList.FindElementsByClassName("android.view.View"); компилятор ругается что нет у monthList функции FindElementsByClassName. Как мне правильно достать все вьюшки у ListView?
 

Livesferma

Client
Регистрация
22.10.2020
Сообщения
42
Благодарностей
9
Баллы
8
месяц и пол заполняются через дропдаун с выбором месяца и пола. Нужно брать из профиля год рождения и пол и оперируясь от них спрлнить форму. Вот так выглядит сама форма
Посмотреть вложение 135381

Вот код с помощью которого я пытаюсь достать месяца

C#:
var driver = instance.DroidInstance.AppiumDriver;
int monthDate = project.Profile.BornMonth;
var monthList = driver.FindElementByClassName("android.widget.ListView");
var allMonths = monthList.FindElementsByClassName("android.view.View");
на строке var allMonths = monthList.FindElementsByClassName("android.view.View"); компилятор ругается что нет у monthList функции FindElementsByClassName. Как мне правильно достать все вьюшки у ListView?
Добрый день, поделюсь своим решением.
У меня устроенно так.
Выбор месяца при регистрации гугл из профиля проекта.:
// ZennoDroid / Appium
var driver = instance.DroidInstance.AppiumDriver;

// Месяц числом (ожидаем 1..12)
int m = project.Profile.BornMonth;
if (m < 1) m = 1;
if (m > 12) m = 12;

// 1) Пытаемся кликнуть по тексту (надёжно, если язык известен)
string[] EN = { "January","February","March","April","May","June","July","August","September","October","November","December" };
string[] RU = { "Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь" };

string t = EN[m-1];
IAndroidElementAPI el = driver.FindElementByXPath($"//*[@text='{t}' or [USER=91226]@Content[/USER]-desc='{t}']"); // driver.*, не element.*
if (el == null)
{
    t = RU[m-1];
    el = driver.FindElementByXPath($"//*[@text='{t}' or [USER=91226]@Content[/USER]-desc='{t}']");
}

if (el != null)
{
    el.Click();
}
else
{
    // 2) Фолбэк: кликаем по индексу в списке
    // Ищем items именно через driver, сужая до ListView
    var items = driver.FindElementsByXPath("//android.widget.ListView/*"); // вернёт IAndroidElementAPI[]
    if (items != null && items.Length >= m)
    {
        items[m - 1].Click();
    }
    else
    {
        // альтернативный фолбэк: искать только текстовые элементы в списке
        items = driver.FindElementsByXPath("//android.widget.ListView//*[self::android.widget.TextView or self::android.widget.CheckedTextView]");
        if (items != null && items.Length >= m)
            items[m - 1].Click();
        else
            throw new Exception("Не удалось найти пункт месяца в выпадающем списке.");
    }
}
 
  • Спасибо
Реакции: djaga, Sok0lov и Ilgiz90

Ilgiz90

Client
Регистрация
07.08.2025
Сообщения
3
Благодарностей
0
Баллы
1
Спасибо, я накидал такое решение
C#:
var driver = instance.DroidInstance.AppiumDriver;
int monthDate = project.Profile.BornMonth;
var currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"January\")");
var monthList = driver.FindElementsByClassName("android.view.View");

if (monthDate > 7){
  driver.ScrollToElementByUiAutomator("new UiSelector().text(\"December\")", 3);
}

switch (monthDate) {
  case 1:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"January\")");
    break;
  }
  
  case 2:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"February\")");
    break;
  }
  case 3:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"March\")");
    break;
  }
  
  case 4:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"April\")");
    break;
  }
  case 5:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"May\")");
    break;
  }
  
  case 6:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"June\")");
    break;
  }
  case 7:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"July\")");
    break;
  }
  
  case 8:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"August\")");
    break;
  }
  case 9:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"September\")");
    break;
  }
  
  case 10:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"October\")");
    break;
  }
  case 11:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"November\")");
    break;
  }
  
  case 12:
  {
    currentMonth = driver.FindElementByUiAutomator("new UiSelector().textContains(\"December\")");
    break;
  }
  default: break;
}

currentMonth.Click();
Добрый день, поделюсь своим решением.
У меня устроенно так.
Выбор месяца при регистрации гугл из профиля проекта.:
// ZennoDroid / Appium
var driver = instance.DroidInstance.AppiumDriver;

// Месяц числом (ожидаем 1..12)
int m = project.Profile.BornMonth;
if (m < 1) m = 1;
if (m > 12) m = 12;

// 1) Пытаемся кликнуть по тексту (надёжно, если язык известен)
string[] EN = { "January","February","March","April","May","June","July","August","September","October","November","December" };
string[] RU = { "Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь" };

string t = EN[m-1];
IAndroidElementAPI el = driver.FindElementByXPath($"//*[@text='{t}' or [USER=91226]@Content[/USER]-desc='{t}']"); // driver.*, не element.*
if (el == null)
{
    t = RU[m-1];
    el = driver.FindElementByXPath($"//*[@text='{t}' or [USER=91226]@Content[/USER]-desc='{t}']");
}

if (el != null)
{
    el.Click();
}
else
{
    // 2) Фолбэк: кликаем по индексу в списке
    // Ищем items именно через driver, сужая до ListView
    var items = driver.FindElementsByXPath("//android.widget.ListView/*"); // вернёт IAndroidElementAPI[]
    if (items != null && items.Length >= m)
    {
        items[m - 1].Click();
    }
    else
    {
        // альтернативный фолбэк: искать только текстовые элементы в списке
        items = driver.FindElementsByXPath("//android.widget.ListView//*[self::android.widget.TextView or self::android.widget.CheckedTextView]");
        if (items != null && items.Length >= m)
            items[m - 1].Click();
        else
            throw new Exception("Не удалось найти пункт месяца в выпадающем списке.");
    }
}
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)