Selenium c# Сравнение текста в гриде с текстом в дропдауне

Использую Selenium и C#

Столкнулась с проблемой. Я получаю значение в дропдауне , потом нужно взять в гриде все значения которые находятся по определенному локатору , вероятно сохранить их и поочереди сравнить с значением из дропдауна.

На реальном примере это выглядит так. В дропдауне есть красная машина, нахожу в гриде все красные машины и сравниваю.

Я нашла локатор, который который находит все значения “красная”.
например
[FindsBy(How = How.XPath, Using = “//mat-cell[contains(@class,‘mat-cell’)]”)]
Но как сделать так что бы кажлый раз брался из грида следующее значение - не понятно.

Подскажите пожалуйста хотя бы направление.

Самое топорное решение, создать 50 локаторов в стиле
[FindsBy(How = How.XPath, Using = “//mat-cell[3][contains(@class,‘mat-cell’)]”)]
и менять только цифру, фактически номер строки. Но это как-то совсем не хорошо

c# ? как нибудь так может быть ?

driver.FindElements(
    By.XPath("//mat-cell[contains(@class,'mat-cell')]"))
    .Select(a => Regex.IsMatch(a.Text, "красная"))
    .GetEnumerator();

про то как LlNQ дружит с фак класс аннотациями не уверен

1 лайк

Сделайте так:

[FindsBy(How = How.XPath, Using = “//mat-cell[contains(@class,‘mat-cell’)]”)]
public IList<IWebElement> NameOfWebElementList {get; private set}

Потом можно, используя обычный цикл сделать проверку:

foreach (var element in NameOfWebElementList)
            {
                element.Text.Should().BeEquivalentTo("Text");
            }

Также можно реализовать через Linq но там может быть сложнее.

2 лайка

Поддерживаю @Valentin_G
Нужно использовать
[FindsBy(How = How.XPath, Using = "XPath")]
private IList<IWebElement> Elements;
или через Driver.FindElements(…);

А дальнейшее сравнение уже через
Assert.True(elements1.SequenceEqual(elements2));
или через
CollectionAssert.AreEquivalent(elements1, elements2);

2 лайка

если это select то можно вытянуть все опшены которые в нём есть через getOptions()
Ну или просто вытянуть все значения

2 лайка

Я так понимаю речь идет и фильтрации или сортировке в гриде, Например колонка цвет машины есть и есть фильтр по цвету машину.
Пишите по сути параметризированный тест, который принимает одно значение(если имена значения ячеек в гриде совпадают со значением выбранного фильтра) или 2 (если отличаются)

  1. Получаете массив всех значение фильтра
  2. массив передаете как параметризацию
  3. Написали метод, который по имени фильтра выбирает значение
  4. Фильтруете
  5. Ждете обновления грида
  6. Получаете все значение(текст) ячеек по имени колонки(должен быть метод)
  7. Просто сравниваете, что каждое значение массива соответствует значению фильтра