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

Автоматизатор мобильных приложений
онлайн, начало 11 августа
Тестирование безопасности
онлайн, начало 11 августа
Тестирование мобильных приложений
онлайн, начало 11 августа
Автоматизация тестирования REST API на Python
онлайн, начало 11 августа
Фотография

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
  • 863 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 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
  • 823 сообщений


Отправлено 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


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



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

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

Яндекс.Метрика
Реклама на портале