Есть кейс - необходимо проверить, что отправляется письмо с корректным текстом, при выборе определенного Шаблона письма. Возможно как альтернатива - оставить чать интересующего текста (ну что-то вроде “проверить наличие определенного текста, все что лишнее - удалить”).
Проблема заключается в следующем, что Шаблон письма можно выбрать только при ответе на уже написанное письмо. Соответственно, в поле текста письма содержится текст: 1) Интересующего Шаблона “плюс” 2) Текст “прошлого” письма. Если хотим отправить письмо без текста “прошлого” письма - удаляем лишнее руками и отправляем интересующий текст.
Вопрос в следующем, могу ли как-то средствами WebDriver или Java удалить текст “прошлого” письма, чтоб проще было выполнить Assert.assertEquals, ну, чтоб в сравнении учавствовал только текст Шаблона (без текста “прошло” письма). Возможно есть метод, который проверяет “частичного” содержания текста в поле.
В целом тест работает с текстом “прошлого” письма, но если, по каким-то причинам придется изменить id письма который учавствует в тесте, то придется править “Ожидаемый и фактический результат” в тесте, что делает тест менее гибким.
В assert полюбому должен быть contain, startwith, endwith, если текст находится в разных нодах, то можно через equal можно проверить просто сделав нужный локатор, или если есть какие-то разделители в тексте то строку обрезать можно
Вы же как-то сравниваете ожидаемый и фактический результат? Если так, то Вы знаете нужный текст. Удалите все тело письма и заполните его нужным текстом.
На счёт проверки на вхождение, погуглите в сторону ассертов типа AssertIn или AssertContains… Если пользуетесь Selenide, там точно should умеет дожидаться и проверять вхождение текста.
А если это все для Вас сложно, то переходите на Python Сможете просто писать вроде “assert text in letter”
Есть ещё вариант вариант дожидаться элемента по xpath: “//*[contains(text(), “ваш текст)”]
благодарю за наводку, подошло решение 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
А потом почитайте что такое Модели данных, чтобы данные было удобно генерить, хранить и пользоваться ими