Проблема с возвращением значения xpath'а

Доброго дня.
Есть путь: //*[@id=“panel-1050-body”]/div[1]/span
Как выглядит строка поиска с выводом:

Инспектор:

Нужно пробить значения. Сделал для этого параметризацию.
Первое значение проверяется нормально. Содержание элемента (getText) возвращается в соответствии с тем, что ты ищешь.
Но когда вводится второй параметр, на экране значение формально меняется, но по сути остается старым.
Т. е. Знач 1 = Span 1. Знач 2 = Span 1. Но на экране я якобы вижу Span 2.

Проверял в инспекторе, там значения меняются с первого на второе.
Извлекал значения уровнем выше (родителя). То же самое.

Есть информация в чем проблема? Или альтернативные решения сравнения того, что ты вводишь, с тем, что выводится тебе.

positive - что вводится в поиск;
negative - с чем проверяется.

WebElement searchStroke = driver.findElement(searchField);
        searchStroke.sendKeys(positive);
        searchStroke.sendKeys(Keys.ENTER);

            Assert.assertEquals(driver.findElement(output).getText(), negative);

            Thread.sleep(2000);
            searchStroke.clear();

После вашего описания все равно не ясно, что вы делаете.
У вас есть span элемент с текстом. Вы его успешно находите. Вы хотите удостовериться что внутри текст как вы ожидаете?
Непонятно что где меняется когда вы что-то куда-то вводите :slight_smile:

1 лайк

Попробуйте выйти из поля, чтобы event сработал, может в этом дело:

searchStroke.sendKeys(Keys.TAB);

Отвечая на вопрос: Да.

Первую проверку можно ассоциировать с самым первым скриншотом в топике.

Вторая проверка (итерация) показывает на экране вот это:

Но получается вот это:

К сожалению, не сработало.

А можете выложить хтмл с несколькими спаунами? Или скриншот.

HTML? Не думаю. Зачем?
Не думаю, что там есть что-то полезное.

Код не смогу выложить. Конфиденциально. И код там - несет в себе крайне малую полезную информацию.

Вы сейчас показываете спаны изолированы, я не вижу как они связаны. По сути вы можете сначала сделать List в котором будут содержаться все спаны. А потом через foreach перебрать их.

1 лайк

проверьте количество спанов вообще в доме, может они все присутствуют и по екшну скрываются или отображаются

List + nodes -> node #1 -> span
page refresh if need after submit

Извиняюсь, не совсем понял.
Было предложено взять в List чуть другой путь до span’а?

for each. Попробую. Могу отписать о результате.

Нет
берёте лист элементов в котором есть спаны (я структуры не вижу они могут быть сложены в диви и т.д.)
потом к листу //list//elenemt[1]//span
получите этот спан и убедитесь что попали в него
(Фаерфоркс Хпас)
потом чтобы по быстром в селениум иде - гет текст - чтобы проверить что вернётся
всё можно валидировать в коде

путь прописывает форматированной строкой и в методе у казывает номер элемента к которому будет обращаться валидатор (ваш метод проверки)

да и проверяйте спаны на изДисплеед - они скорее всего либо из базы беруться либо спрятаны по дефолту

Там нет никаких других спанов. Если вы имеете в виду те, что похожи на этот. Сверху прерывается родитель всего каталога с поиском.
Снизу уже идут ноды совсем других полей.
В div выше, что закрыт - там ничего нет связанного с этим span’ом.

P.S. Я еще не пробовал ваш вариант, но пробовал до этого найти через Selenium IDE. Он будет брать ID=“genx”. Что дает мне крайне мало пользы, поскольку id здесь генерируется каждый раз при обновлении страницы.

Если спан один, то что каким образом внутри меняется текст?

Измененный. Random id=gen. И id span’а.

Немножко дополнительной инфы:


В DOM’е же, ничего нет.

public void Search(String positive, String negative) throws InterruptedException {
        WebElement searchStroke = driver.findElement(searchField);
        searchStroke.sendKeys(positive);
        searchStroke.sendKeys(Keys.ENTER);

        searchStroke.sendKeys(Keys.TAB);

        List<WebElement> xxx = driver.findElements(output);

        int size = xxx.size();
        for (int i=0; i<size; i++){
            if (xxx.get(i).isDisplayed()) {
                System.out.println(xxx.get(i).getText());
            }
            else {
                System.out.println("not displayed");
            }
        }

        Thread.sleep(2000);
        searchStroke.clear();

Вывод:

А-130 Москва - Малоярославец - Рославль - граница с Республикой Белоруссия 100 км 500 м
А-130 Москва - Малоярославец - Рославль - граница с Республикой Белоруссия 100 км 500 м
The name of the testcase passed is : SearchTest

А-130 Москва - Малоярославец - Рославль - граница с Республикой Белоруссия 100 км 500 м
А-130 Москва - Малоярославец - Рославль - граница с Республикой Белоруссия 100 км 500 м
The name of the testcase passed is : SearchTest