Получить ячейку по значению соседней

SparkRu

Client
Регистрация
24.06.2021
Сообщения
13
Благодарностей
0
Баллы
1
Подскажите пожалуйста, есть строка в таблице 1 ячейка Значение "Адрес" 2 ячейка Значение "Сам Адрес", от страницы к странице путь Xpath 2-й ячейке
постоянно меняется. как можно найдя по тексту "Адрес" 1-ю ячейку, получить значение второй?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 543
Баллы
113
Создаем C# кубик и закидываем туда код ниже.
Сейчас это работает так: если найдено значение из переменной (например, "Адрес") в столбце A, то возвращается значение из соседней колонки "B". Если нужно изменить наименования столбцов, просто отредактируйте код.

Если ничего не найдено, то экшен завершится по красной ветке.

C#:
var table = project.Tables["Таблица1"];
var text = project.Variables["НАЗВАНИЕ ПЕРЕМЕННОЙ"].Value; // Что ищем

for(int i = 0; i<table.RowCount; i++) {
    if(table.GetCell("A", i) == text) { // Если найдено в столбце A
        table.GetCell("B", i); // Берем значение из соседнего столбца
        return "Найдено";
    }
}
return null;
 

SparkRu

Client
Регистрация
24.06.2021
Сообщения
13
Благодарностей
0
Баллы
1
Прошу прощения, может я не правильно что написал, имелась ввиду таблица на странице ячейка типа /tr[4]/td[1]
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 543
Баллы
113

SparkRu

Client
Регистрация
24.06.2021
Сообщения
13
Благодарностей
0
Баллы
1

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
1624572595357.png1624572681027.png
C#:
foreach(string s in project.Lists["list"]){
    if(s.Split(new[]{"\t"}, StringSplitOptions.None).First().Trim().Equals("Адрес места нахождения"))
        return s.Split(new[]{"\t"}, StringSplitOptions.None).Last().Trim();
}
 
  • Спасибо
Реакции: SparkRu
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
Пример:

Задача:
Найти поле для вставки рубрики.

79248


Решение №1:
Код:
//table[@class="form-table"]//td[text()="Рубрика:"]/parent::tr/td[2]
Пояснение:
parent::
— содержит элемент-предок на один уровень назад. Это обращение можно заменить на ..

Решение №2:
Код:
//table[@class="form-table"]//td[text()="Рубрика:"]/following-sibling::td
Пояснение:
following-sibling::
— содержит множество братских элементов того же уровня, следующих за текущим слоем.

Резюме:
Для того, чтобы перепрыгнуть на соседний столбец таблицы, понадобилось: определить маркер, вернуться к родительскому контейнеру и от него к цели.

1) //table[@class="form-table"]//td[text()="Рубрика:"] - маркер
2) parent:: или .. (шаг назад) или following-sibling:: (братский/сестринский тег)
3) td[2] или td - цель
 
Последнее редактирование:
  • Спасибо
Реакции: Sk8er и SparkRu

SparkRu

Client
Регистрация
24.06.2021
Сообщения
13
Благодарностей
0
Баллы
1
Благодарю, оба решения помогли
 

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