Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не получается сравнить часть текста с переменной


(Diana) #1

Есть 3 поля input. С первого input создала переменную (это фамилия)

String field = driver.findElement(By.xpath("//input")).getAttribute("value");

Но есть еще другие 2 поля (имя, отчество)

На выходе в таблицу попадает строка “фамилия имя отчество”, но так как я занесла в переменную только “фамилию”, не получается сравить эти две записи командой

assertEquals(field, driver.findElement(By.xpath("//ячейка в таблице.getText());

В IDE было

*${фамилия}*

В Java такой номер не проходит, как указать что нужно не точное совпадение, а то, что строка “фамилия имя отчество” просто содержит ранее объявленную переменную field?


(Keiga) #2
  1. Почему нельзя записывать в переменную не только фамилию, но еще и два других поля, а потом сравнивать с ячейкой?
  2. Можно попробовать как-то так:

String s = driver.findElement(By.xpath("//xpath_here").getText());
Assert.assertTrue(s.contains(field));


(Diana) #3

я не умею заносить в переменную все input разом, только по очереди если создать 3 раза String, потом их как-то преобразовать в один String, а уже потом сравнивать с результативной ячейкой

но я знаю, что это неправильно и коряво

а ваш вариант сработал, спасибо! :blush:

еще вопросик, если позволите, почему нельзя в данном случае использовать assertEquals, а вместо него надо assertTrue?


(Keiga) #4

Может и коряво, зато Вам будет понятней и сразу будете сравнивать целиком поле и значение, а не кусочками. Сначала делаете три независимых переменных, а потом склеиваете в одну:
String result = string1 + string2 + string3;
возможно придется добавить пробелы, тогда будет
String result = string1 + " " + string2 + " " + string3;

assertEquals сравнивает два значения в скобках, чтобы они были точно равны друг другу.
asserTrue проверяет чтобы выражение в скобках было true. А s.contains(field) вернет true если в переменной содержится нужный Вам текст.

Через assertEquals можно сделать так:
String s = driver.findElement(By.xpath("//xpathhere").getText());
Assert.asassertEquals(true, s.contains(field));


(Dmytro Makhno) #5

jfyi

Ссылки:
http://junit.sourceforge.net/javadoc/org/junit/Assert.html
http://testng.org/javadoc/org/testng/Assert.html

Hamcrest сахар:


Базовое:
assertThat(cellFio.getText(), containsString(lastName))

WebDriver:
assertThat(cellFio, text(containsString(lastName)))

а тут примеры с подвывертом, если таблица будет какое-то время прорисовывать и нужно дождаться значения в ячейке.

Сахаром называю т.к. можно и без него, но в целом облегчает диагностику.
В случае assertTrue(False), или assertEquals(False, True), можно получить содержательное True didn't equal False, и трассу.
hamCrest берет на себя задачу представить ошибку в человекочитаемом виде (из доки):

assertThat(title, className("big-title");

java.lang.AssertionError:
Expected: element "class" attribute is "big-title"
     but: <Title> "class" attribute is "another-class-name"

P.S. Есть аналоги hamcret… e.g. fest.


(Diana) #6

спасибо, буду изучать :blush:

не получается из поля select выдрать выбранное значение в виде текста и положить его в переменную

getText выдает весь список, а `getAttribute` цифру

вы не знаете, какой командой можно это сделать?


(Вадим Чадюк) #7
Select comboBox = new Select(driver.findElement(By.id("some_id")));
String selectedComboValue = comboBox.getFirstSelectedOption().getText();

Примерно так должно работать


(Diana) #8

гениально! спасибочки


(Александр Таранков) #9

Заканчиваем писать все накопившиеся вопросы в одной теме. Одна проблема - одна тема для обсуждения