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

Еще раз.
Вы показываете кусок HTML кода где виден только ОДИН спан.
Если он один, то скажите после каких действий текст внутри меняется!
Пока все ваши объяснения мало полезные.

То что вы показали в коде работает нормально. Нашло два спана. Вывело текст из двух спанов. Он в них одинаковый - ну и что?

Спан один, но разный. Это видно на скриншотах.
Меняется после ввода и конферма нового запроса в поиск.

Тогда после каждого конферма тебе надо находить этот спан заново.

Как мне это сделать с массивом параметризации? Он и так прокручивает данные через поиск. Допустим я сделаю цикл или просто 2 последовательных поиска, но в каждом из них он же прокрутит весь массив, когда будет вводить данные. И проверять на выводе тоже.

Тебе нужно почитать про параметризация тестов с помощью TestNG или JUnit. В TestNG это происходит с помощью DataProvider.

Что вы мучаетесь? ва нужен текст - ну так ищите самым простым способом хпас //[contains(.,‘blah-blah-blal’)]
в этом пути уже и проверка содержится
хотите параметры тогда вот //
[contains(.,’%s’)]

Я и так пользуюсь DataProvider для testng.

Я еще раз перечитал свой ТС.

Конкретные проблемы:
Почему при обработке параметризации тест видит старое значение после поиска вместо нового. Я попробую указать специфичный xpath, чтобы он целил в текст, который является частью массива параметризации, но не думаю, что это поменяет что-то…

Стектрайс в студию, код и хтмл каркас - секурные фото не нужны
Иначе мы мы ставим диагноз по фото.
Пока я так понял из описания - просто не правильно отработал циккл (если что-то в принципе находится) не совпадают введённые данные и ассерт.

1 лайк

Проблема вроде бы как решилась после того как у меня слетел encoder и мне пришлось немножко попотеть с восстановлением проекта в исходное состояние.
Что вышло:

public class PMSearch {
    WebDriver driver;

    By searchField = By.id ("searchField-1048-inputEl");
    By output = By.xpath ("//*[@id='panel-1050']//*[contains(text(),'')]");

public PMSearch(WebDriver driver) {
        this.driver = driver;
    }

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

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

        searchStroke.sendKeys(Keys.TAB);

        Assert.assertTrue(driver.findElement(output).getText().contains(negative));
    }
}

Раньше я эксперементировал с разными функциями сравнения. И забыл какой метод выдает сравниваемые результаты не как true/false, а как string1 и string2 при получении ошибки в IDE,
Может быть кто-то напомнит. assertSame (?) Возможно в будущем поменяю этот момент.

Вы лучше вынесите инициализацию драйвера в Base Page класс

ИМХО Проще любую обёртку использовать, типа селениде и вообще забыть про это.

Вот это я так понимаю инициализирут серч на клиенте? мне если честно не очень
ну как вижу перед асертом никакого ожидания

Ещё не понятно зачем столько действий в одном методе
WebElement searchStroke = driver.findElement(searchField);
searchStroke.sendKeys(positive);
searchStroke.sendKeys(Keys.ENTER);

    Thread.sleep(2000);

после этого уже должен быть какой-то результат… полагаю позитивный.
На негативный - отдельная проверка нужна имхо.
Я бы на 2 теста разбил

однозначно надо использовать какую-то обёртку