Перейти к содержимому

Фотография

verifyValue vs try catch


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 parsecnet

parsecnet

    Новый участник

  • Members
  • Pip
  • 15 сообщений

Отправлено 18 февраля 2013 - 10:04

Добрый день!
Помогите пожалуйста начинающему. Логика теста такова. Пользователь на форме заполняет поля, некоторые поля должны заполниться автоматически, нажимает "Сохранить", запись падает в БД. Открываем журнал заявок, загружаем поступившую заявку, проверяем корректность заполнения полей (во первых, то что заполнены, во вторых, то что подгрузились данные в поля, заполняемые автоматически). Поскольку в Java кодинге полный ноль, экспортировал из Selenium Ide в Java. Соответственно, получил конструкции типа:

try {
assertEquals(DOC_DATE, driver.findElement(By.id("DOC_DATE")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}
итд.
Тест отваливается, дебаггер указывает на это:
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
конкретно на выделенную строку. Понятно, что какая то проверка не прошла. Теперь вопрос, как собственно узнать, какая?
  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 18 февраля 2013 - 14:44

Добрый день!
Помогите пожалуйста начинающему. Логика теста такова. Пользователь на форме заполняет поля, некоторые поля должны заполниться автоматически, нажимает "Сохранить", запись падает в БД. Открываем журнал заявок, загружаем поступившую заявку, проверяем корректность заполнения полей (во первых, то что заполнены, во вторых, то что подгрузились данные в поля, заполняемые автоматически). Поскольку в Java кодинге полный ноль, экспортировал из Selenium Ide в Java. Соответственно, получил конструкции типа:

try {
assertEquals(DOC_DATE, driver.findElement(By.id("DOC_DATE")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}
итд.
Тест отваливается, дебаггер указывает на это:
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
конкретно на выделенную строку. Понятно, что какая то проверка не прошла. Теперь вопрос, как собственно узнать, какая?


У вас вообще много ошибок:
1. В tearDown() оставьте только driver.quit();, остальное удаляйте
2.
assertEquals(DOC_DATE, driver.findElement(By.id("DOC_DATE")).getAttribute("value"));

Что такое DOC_DATE ? это у Вас есть переменная, которую вы так объявили ?
  • 0

#3 parsecnet

parsecnet

    Новый участник

  • Members
  • Pip
  • 15 сообщений

Отправлено 19 февраля 2013 - 06:13

Это не у меня много ошибок, это Selenium Ide так экспортировал :biggrin: . DOC_DATE - да это переменная, поле с датой.
Методом последовательного включения проверок я выяснил в каком месте ошибка. Но это не снимает вопроса. По Вашему совету, я удалил из tearDown() все кроме driver.quit(); тест проходит, но если я делаю намеренную ошибку в строке проверки, то тест тоже проходит. Это как то неправильно.
  • 0

#4 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 19 февраля 2013 - 08:27

Это не у меня много ошибок, это Selenium Ide так экспортировал :biggrin:/> . DOC_DATE - да это переменная, поле с датой.
Методом последовательного включения проверок я выяснил в каком месте ошибка. Но это не снимает вопроса. По Вашему совету, я удалил из tearDown() все кроме driver.quit(); тест проходит, но если я делаю намеренную ошибку в строке проверки, то тест тоже проходит. Это как то неправильно.

Ругается на эту строку из-за принципа работы verify.

Verify генерирует ошибку проверки, но TesNG или JUnit не позволяют просто сейчас изменить статус выполнения на fail и пойти дальше. Поэтому, чтобы отметить, что в тесте были ошибки (но не критичные) по окончании выполнения проверяется состояние verificationErrorString. Если строка не пустая, значит были ошибки и надо как-то это отметить, вот у вас и генерируется exception, чтобы в TestNG (JUnit) общий статус выполнения был fail (иначе в логе у вас будут записи с ошибками, но в логе TestNG общий статус выполнения будет passed). Поэтому не стоит обращать внимания на ошибку, она к месту, так и должно быть.
  • 0

#5 parsecnet

parsecnet

    Новый участник

  • Members
  • Pip
  • 15 сообщений

Отправлено 19 февраля 2013 - 10:18

Т.е, если я правильно понял, наличие ошибки в строке fail(verificationErrorString) - это на самом деле не ошибка, а некритичная погрешность. Я на примере поясню, в том тесте, который я делал, в поле должна отображаться определенная сумма. И на странице с формой она отображается. Однако, на самом деле в этом поле перед собственно числом стояли невидимые глазом пробелы. На такой проверке возникала ошибка:
try {
assertEquals("10000", driver.findElement(By.id("PAYMENT")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}

А так тест проходил полностью успешно:
try {
assertEquals(" 10000", driver.findElement(By.id("PAYMENT")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}
После того, как добавил в строку getAttribute("value").trim() все стало хорошо.
  • 0

#6 Wrestler

Wrestler

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 19 февраля 2013 - 15:06

Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();
  • 0

#7 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 20 февраля 2013 - 06:09

Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();

А на странице такой элемент только один?
Если нет - то надо более точно указывать на какой именно нужен клик.
Если один - попробуйте вставить небольшую задержку перед кликом.
  • 1

#8 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 20 февраля 2013 - 07:41


Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();

А на странице такой элемент только один?
Если нет - то надо более точно указывать на какой именно нужен клик.
Если один - попробуйте вставить небольшую задержку перед кликом.


Как-то у нас темы переплелись.

parsecnet,

fail(verificationErrorString); - запускается, чтобы указать, что в тесте были ошибки (просто вы получите информацию об ошибках не по ходу их обнаружения, а по факту окончания теста). verificationErrorString будет не пустой, только если у вас были ошибки verify:

try {
assertEquals("10000", driver.findElement(By.id("PAYMENT")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}

Последняя строка как раз добавляет описание ошибки к verificationErrors.

fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify. А также позволит показать, что тест failed (ошибки verify - это все равно ошибки и статус выполнения теста должен быть соответствующий). Для примера можете закомментировать эту строку с fail и увидите, что в этом случае ваш тест будет иметь статус passed, несмотря на наличие ошибок verify. Такой подход связан с ограничениями JUnit/TestNG

Wrestler,

Причин может быть много, нужно смотреть, что именно у вас происходит. Из распространенных:

1) Элемент невидим (надо выполнить scroll, чтобы элемент попал в зону видимости)
2) Элемент disabled
3) Элемент перекрыт другим элементом (не в фокусе)
4) что-то свое..

Чтобы избежать такой ситуации используйте WebDriverWait и ExpectedConditions.elementToBeClickable
  • 2

#9 parsecnet

parsecnet

    Новый участник

  • Members
  • Pip
  • 15 сообщений

Отправлено 20 февраля 2013 - 14:39

fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify.

Вот собственно это я и пытаюсь выяснить с самого начала - где увидеть эти ошибки?
Но кажется я решил эту проблему, добавил после
if (!"".equals(verificationErrorString)) {
System.out.println(verificationErrorString);

После чего в консоли можно увидеть, что собственно отваливается.
  • 0

#10 tab15

tab15

    Активный участник

  • Members
  • PipPip
  • 128 сообщений

Отправлено 21 февраля 2013 - 09:57



fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify.

Вот собственно это я и пытаюсь выяснить с самого начала - где увидеть эти ошибки?
Но кажется я решил эту проблему, добавил после
if (!"".equals(verificationErrorString)) {
System.out.println(verificationErrorString);

После чего в консоли можно увидеть, что собственно отваливается.

Предполагаю, что в консоли будет только "java.lang.AssertionError", что собственно и так ясно
  • 0

#11 parsecnet

parsecnet

    Новый участник

  • Members
  • Pip
  • 15 сообщений

Отправлено 21 февраля 2013 - 11:12

Нет, на практике убедился, пишет что именно не проходит. Буквально так:

org.junit.ComparisonFailure: expected:<Ленина п[р-кт]> but was:<Ленина п[л]>

Т.е. проверка ожидала найти проспект Ленина, а вместо этого нашла площадь :biggrin:
  • 1

#12 Wrestler

Wrestler

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 21 февраля 2013 - 13:28



Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();

А на странице такой элемент только один?
Если нет - то надо более точно указывать на какой именно нужен клик.
Если один - попробуйте вставить небольшую задержку перед кликом.


Как-то у нас темы переплелись.

parsecnet,

fail(verificationErrorString); - запускается, чтобы указать, что в тесте были ошибки (просто вы получите информацию об ошибках не по ходу их обнаружения, а по факту окончания теста). verificationErrorString будет не пустой, только если у вас были ошибки verify:

try {
assertEquals("10000", driver.findElement(By.id("PAYMENT")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}

Последняя строка как раз добавляет описание ошибки к verificationErrors.

fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify. А также позволит показать, что тест failed (ошибки verify - это все равно ошибки и статус выполнения теста должен быть соответствующий). Для примера можете закомментировать эту строку с fail и увидите, что в этом случае ваш тест будет иметь статус passed, несмотря на наличие ошибок verify. Такой подход связан с ограничениями JUnit/TestNG

Wrestler,

Причин может быть много, нужно смотреть, что именно у вас происходит. Из распространенных:

1) Элемент невидим (надо выполнить scroll, чтобы элемент попал в зону видимости)
2) Элемент disabled
3) Элемент перекрыт другим элементом (не в фокусе)
4) что-то свое..

Чтобы избежать такой ситуации используйте WebDriverWait и ExpectedConditions.elementToBeClickable





Не получается безошибочно использовать WebDriverWait; При использовании любых методов ожидания, перестает сохранчть последовательность тетс-кейса или витоге тест падает.

driver.FindElement(By.Id("Link")).Click();

driver.FindElement(By.Id("button1")).Click();

driver.FindElement(By.Id("Link1")).Click();

driver.FindElement(By.Id("button1")).Click();


driver.FindElement(By.Id("link3")).Click();
driver.FindElement(By.Id("button1")).Click();
  • 0

#13 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 22 февраля 2013 - 07:14




Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();

А на странице такой элемент только один?
Если нет - то надо более точно указывать на какой именно нужен клик.
Если один - попробуйте вставить небольшую задержку перед кликом.


Как-то у нас темы переплелись.

parsecnet,

fail(verificationErrorString); - запускается, чтобы указать, что в тесте были ошибки (просто вы получите информацию об ошибках не по ходу их обнаружения, а по факту окончания теста). verificationErrorString будет не пустой, только если у вас были ошибки verify:

try {
assertEquals("10000", driver.findElement(By.id("PAYMENT")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}

Последняя строка как раз добавляет описание ошибки к verificationErrors.

fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify. А также позволит показать, что тест failed (ошибки verify - это все равно ошибки и статус выполнения теста должен быть соответствующий). Для примера можете закомментировать эту строку с fail и увидите, что в этом случае ваш тест будет иметь статус passed, несмотря на наличие ошибок verify. Такой подход связан с ограничениями JUnit/TestNG

Wrestler,

Причин может быть много, нужно смотреть, что именно у вас происходит. Из распространенных:

1) Элемент невидим (надо выполнить scroll, чтобы элемент попал в зону видимости)
2) Элемент disabled
3) Элемент перекрыт другим элементом (не в фокусе)
4) что-то свое..

Чтобы избежать такой ситуации используйте WebDriverWait и ExpectedConditions.elementToBeClickable





Не получается безошибочно использовать WebDriverWait; При использовании любых методов ожидания, перестает сохранчть последовательность тетс-кейса или витоге тест падает.

driver.FindElement(By.Id("Link")).Click();

driver.FindElement(By.Id("button1")).Click();

driver.FindElement(By.Id("Link1")).Click();

driver.FindElement(By.Id("button1")).Click();


driver.FindElement(By.Id("link3")).Click();
driver.FindElement(By.Id("button1")).Click();


не очень понял про последовательность кейса. Как wait на нее влияет?

WebDriverWait wait = new WebDriverWait(driver, 30);

wait.until(ExpectedConditions.elementToBeClickable(By.Id("Link"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.Id("button1"))).click();

и т.д.

Что нарушается?
  • 0

#14 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 22 февраля 2013 - 07:15

Нет, на практике убедился, пишет что именно не проходит. Буквально так:

org.junit.ComparisonFailure: expected:<Ленина п[р-кт]> but was:<Ленина п[л]>

Т.е. проверка ожидала найти проспект Ленина, а вместо этого нашла площадь :biggrin:/>


По идее этот же текст должен быть в логе выполнения JUnit/TestNg в описании Exception, с которым тест остановился.
  • 0

#15 Wrestler

Wrestler

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 22 февраля 2013 - 08:35





Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();

А на странице такой элемент только один?
Если нет - то надо более точно указывать на какой именно нужен клик.
Если один - попробуйте вставить небольшую задержку перед кликом.


Как-то у нас темы переплелись.

parsecnet,

fail(verificationErrorString); - запускается, чтобы указать, что в тесте были ошибки (просто вы получите информацию об ошибках не по ходу их обнаружения, а по факту окончания теста). verificationErrorString будет не пустой, только если у вас были ошибки verify:

try {
assertEquals("10000", driver.findElement(By.id("PAYMENT")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}

Последняя строка как раз добавляет описание ошибки к verificationErrors.

fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify. А также позволит показать, что тест failed (ошибки verify - это все равно ошибки и статус выполнения теста должен быть соответствующий). Для примера можете закомментировать эту строку с fail и увидите, что в этом случае ваш тест будет иметь статус passed, несмотря на наличие ошибок verify. Такой подход связан с ограничениями JUnit/TestNG

Wrestler,

Причин может быть много, нужно смотреть, что именно у вас происходит. Из распространенных:

1) Элемент невидим (надо выполнить scroll, чтобы элемент попал в зону видимости)
2) Элемент disabled
3) Элемент перекрыт другим элементом (не в фокусе)
4) что-то свое..

Чтобы избежать такой ситуации используйте WebDriverWait и ExpectedConditions.elementToBeClickable





Не получается безошибочно использовать WebDriverWait; При использовании любых методов ожидания, перестает сохранчть последовательность тетс-кейса или витоге тест падает.

driver.FindElement(By.Id("Link")).Click();

driver.FindElement(By.Id("button1")).Click();

driver.FindElement(By.Id("Link1")).Click();

driver.FindElement(By.Id("button1")).Click();


driver.FindElement(By.Id("link3")).Click();
driver.FindElement(By.Id("button1")).Click();


не очень понял про последовательность кейса. Как wait на нее влияет?

WebDriverWait wait = new WebDriverWait(driver, 30);

wait.until(ExpectedConditions.elementToBeClickable(By.Id("Link"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.Id("button1"))).click();

и т.д.

Что нарушается?



Нарушается последовательность кликов.
Должен:

wait.until(ExpectedConditions.elementToBeClickable(By.Id("Link"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.Id("button1"))).click();

wait.until(ExpectedConditions.elementToBeClickable(By.Id("Link1))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.Id("button1"))).click();

wait.until(ExpectedConditions.elementToBeClickable(By.Id("Link2))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.Id("button1"))).click();

А он проходит рандомно:

wait.until(ExpectedConditions.elementToBeClickable(By.Id("Link"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.Id("button1"))).click();

wait.until(ExpectedConditions.elementToBeClickable(By.Id("Link9))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.Id("button1"))).click();

Т.е. последовательность кликов которая должна быть не сохраняется. Теряется стабильность.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных