Вопрос: возможно ли с помощью WebDriver удалить часть "ненужного" текста из текстового поля

Приветствую! Подскажите, возможно есть решение.

Есть кейс - необходимо проверить, что отправляется письмо с корректным текстом, при выборе определенного Шаблона письма. Возможно как альтернатива - оставить чать интересующего текста (ну что-то вроде “проверить наличие определенного текста, все что лишнее - удалить”).

Проблема заключается в следующем, что Шаблон письма можно выбрать только при ответе на уже написанное письмо. Соответственно, в поле текста письма содержится текст: 1) Интересующего Шаблона “плюс” 2) Текст “прошлого” письма. Если хотим отправить письмо без текста “прошлого” письма - удаляем лишнее руками и отправляем интересующий текст.

Вопрос в следующем, могу ли как-то средствами WebDriver или Java удалить текст “прошлого” письма, чтоб проще было выполнить Assert.assertEquals, ну, чтоб в сравнении учавствовал только текст Шаблона (без текста “прошло” письма). Возможно есть метод, который проверяет “частичного” содержания текста в поле.

В целом тест работает с текстом “прошлого” письма, но если, по каким-то причинам придется изменить id письма который учавствует в тесте, то придется править “Ожидаемый и фактический результат” в тесте, что делает тест менее гибким.

Для написания теста использую WebDriver + Java.

В assert полюбому должен быть contain, startwith, endwith, если текст находится в разных нодах, то можно через equal можно проверить просто сделав нужный локатор, или если есть какие-то разделители в тексте то строку обрезать можно

1 лайк

Вы же как-то сравниваете ожидаемый и фактический результат? Если так, то Вы знаете нужный текст. Удалите все тело письма и заполните его нужным текстом.

На счёт проверки на вхождение, погуглите в сторону ассертов типа AssertIn или AssertContains… Если пользуетесь Selenide, там точно should умеет дожидаться и проверять вхождение текста.

А если это все для Вас сложно, то переходите на Python :wink: Сможете просто писать вроде “assert text in letter” :wink:

Есть ещё вариант вариант дожидаться элемента по xpath: “//*[contains(text(), “ваш текст)”]

1 лайк

благодарю за наводку, подошло решение c .contain()

Здесь пример как использовал:

WebElement element = driver.findElement(By.xpath("/html/body"));
Assert.assertTrue(element.getText().contains("text of template"));

Со startwith, endwith не разбирался ещё как использовать. пока .contains подходит, т. к. текст “шаблона” идет сплошным текстом

Это мой первый авто-тест, тонкостей не знаю. Буду признателен, если на “моем” примере покажешь как можно применить startwith, endwith. Это на будущее, т. к. в шаблоне подставляются данные о Пользователе, а они уникальные и если изменится ссылка для Пользователя, придется менять все текста в тест-кейсах из-за подстановки других уникальны данных (ФИО, адрес и т. д.)

да, я могу “удалить”, затем “подставить” необходимый шаблон “руками”, но в данном случае не хочу этого делать, т. к. считаю это, некоторым, тестом, типа: “при выборе определенного названия шаблона - подставляется текст корректного шаблона” и сравниваю с тем, что ожидаю увидеть от Шаблона.

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

не встречал пока ещё подобного на просторах

спасибо за наводку!

startswith и endswith используются также как и contain, только проверка делаятся на начало и конец строки, не факт что вам подойдет.

А чтобы не пришлось много менять текста и не только, данные не нужно хардкодить и нужно правильно организовать код, посмотрите про Page Object для начала What is PageObject pattern in Selenium WebDriver? - YouTube
А потом почитайте что такое Модели данных, чтобы данные было удобно генерить, хранить и пользоваться ими