verifyValue vs try catch
#1
Отправлено 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);
}
}
конкретно на выделенную строку. Понятно, что какая то проверка не прошла. Теперь вопрос, как собственно узнать, какая?
#2
Отправлено 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 ? это у Вас есть переменная, которую вы так объявили ?
#3
Отправлено 19 февраля 2013 - 06:13
Методом последовательного включения проверок я выяснил в каком месте ошибка. Но это не снимает вопроса. По Вашему совету, я удалил из tearDown() все кроме driver.quit(); тест проходит, но если я делаю намеренную ошибку в строке проверки, то тест тоже проходит. Это как то неправильно.
#4
Отправлено 19 февраля 2013 - 08:27
Ругается на эту строку из-за принципа работы verify.Это не у меня много ошибок, это Selenium Ide так экспортировал /> . DOC_DATE - да это переменная, поле с датой.
Методом последовательного включения проверок я выяснил в каком месте ошибка. Но это не снимает вопроса. По Вашему совету, я удалил из tearDown() все кроме driver.quit(); тест проходит, но если я делаю намеренную ошибку в строке проверки, то тест тоже проходит. Это как то неправильно.
Verify генерирует ошибку проверки, но TesNG или JUnit не позволяют просто сейчас изменить статус выполнения на fail и пойти дальше. Поэтому, чтобы отметить, что в тесте были ошибки (но не критичные) по окончании выполнения проверяется состояние verificationErrorString. Если строка не пустая, значит были ошибки и надо как-то это отметить, вот у вас и генерируется exception, чтобы в TestNG (JUnit) общий статус выполнения был fail (иначе в логе у вас будут записи с ошибками, но в логе TestNG общий статус выполнения будет passed). Поэтому не стоит обращать внимания на ошибку, она к месту, так и должно быть.
#5
Отправлено 19 февраля 2013 - 10:18
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() все стало хорошо.
#6
Отправлено 19 февраля 2013 - 15:06
Код такой:
driver.FindElement(By.Id("button1")).Click();
#7
Отправлено 20 февраля 2013 - 06:09
А на странице такой элемент только один?Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();
Если нет - то надо более точно указывать на какой именно нужен клик.
Если один - попробуйте вставить небольшую задержку перед кликом.
#8
Отправлено 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
#9
Отправлено 20 февраля 2013 - 14:39
Вот собственно это я и пытаюсь выяснить с самого начала - где увидеть эти ошибки?fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify.
Но кажется я решил эту проблему, добавил после
if (!"".equals(verificationErrorString)) {
System.out.println(verificationErrorString);
После чего в консоли можно увидеть, что собственно отваливается.
#10
Отправлено 21 февраля 2013 - 09:57
Предполагаю, что в консоли будет только "java.lang.AssertionError", что собственно и так ясноВот собственно это я и пытаюсь выяснить с самого начала - где увидеть эти ошибки?
fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify.
Но кажется я решил эту проблему, добавил после
if (!"".equals(verificationErrorString)) {
System.out.println(verificationErrorString);
После чего в консоли можно увидеть, что собственно отваливается.
#11
Отправлено 21 февраля 2013 - 11:12
org.junit.ComparisonFailure: expected:<Ленина п[р-кт]> but was:<Ленина п[л]>
Т.е. проверка ожидала найти проспект Ленина, а вместо этого нашла площадь
#12
Отправлено 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();
#13
Отправлено 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();
и т.д.
Что нарушается?
#14
Отправлено 22 февраля 2013 - 07:15
Нет, на практике убедился, пишет что именно не проходит. Буквально так:
org.junit.ComparisonFailure: expected:<Ленина п[р-кт]> but was:<Ленина п[л]>
Т.е. проверка ожидала найти проспект Ленина, а вместо этого нашла площадь />
По идее этот же текст должен быть в логе выполнения JUnit/TestNg в описании Exception, с которым тест остановился.
#15
Отправлено 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 анонимных