Помогите разобраться ошибками в Eclipse
#1
Отправлено 07 апреля 2012 - 08:33
Пишу тест, запускаю (знаю что ошибок в нём нет), всё проходит, сразу после теста окна браузера закрываются.
Запускаю тест и специально делаю там ошибку. Например verifyTrue(selenium.isElementPresent(....)), такого элемента нет 100%. Тест также проходит, в Error Log ничего нет. В Failure Trace следующее:
"java.lang.AssertionError: java.lang.AssertionError: null
at com.thoughtworks.selenium.SeleneseTestBase.fail(SeleneseTestBase.java:360)
at com.thoughtworks.selenium.SeleneseTestBase.assertTrue(SeleneseTestBase.java:365)
at com.thoughtworks.selenium.SeleneseTestBase.assertTrue(SeleneseTestBase.java:369)
at com.thoughtworks.selenium.SeleneseTestBase.verifyTrue(SeleneseTestBase.java:129)
at com.thoughtworks.selenium.SeleneseTestCase.verifyTrue(SeleneseTestCase.java:119)
at com.example.tests.asd.testNew(asd.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at com.thoughtworks.selenium.SeleneseTestCase.runBare(SeleneseTestCase.java:212)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
at com.thoughtworks.selenium.SeleneseTestBase.fail(SeleneseTestBase.java:360)
at com.thoughtworks.selenium.SeleneseTestBase.checkForVerificationErrors(SeleneseTestBase.java:398)
at com.thoughtworks.selenium.SeleneseTestCase.checkForVerificationErrors(SeleneseTestCase.java:33)
at com.example.tests.asd.testNew(asd.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at com.thoughtworks.selenium.SeleneseTestCase.runBare(SeleneseTestCase.java:212)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)"
Вот и как понять, если не знать конечно что в данной команде ошибка и такого локатора нет, что тут ошибка? Заранее спасибо
#2
Отправлено 07 апреля 2012 - 09:55
типо:
if isElementPresent() {
System.out.println("Все хорошо")
else
System.out.println("Элемент не найден")
#3
Отправлено 07 апреля 2012 - 10:29
#4
Отправлено 09 апреля 2012 - 07:38
проверки типо verifyTrue или assert лучше использовать только тогда, когда уверен на 99%, что проверка будет верна иначе будет Failure (сбой). Если ты не уверен, что проверка пройдет, заменяй её простым if
Это неверно. Assert проверки нужно юзать как минимум 1 раз в конце любого теста(if никогда не сможет заменить всю гибкость таких проверок). Другое дело verify проверки, в принципе я их юзаю только если какие-то действия проходные и в целом не влияют на конечный результат, но при этом важно чтоб я знал, что в них произошла ошибка(просто записываю их в Log).
#5
Отправлено 09 апреля 2012 - 17:35
Это неверно. Assert проверки нужно юзать как минимум 1 раз в конце любого теста(if никогда не сможет заменить всю гибкость таких проверок).
Не понял тебя, покажи пример кода
#6
Отправлено 10 апреля 2012 - 07:12
LoginPage loginPage = app.go(); loginPage.login().as( "..." ).withPassword( "..." ).withAutoLogin().perform(); Assert.assertTrue( (new HomePage(app)).isThisPage() );Второй варинант:
LoginPage loginPage = app.go(); loginPage.login().as( "..." ).withPassword( "..." ).withAutoLogin().perform(); HomePage homePage = new HomePage(app); Assert.assertEquals( homePage.getTableOne(), homePage.getTableTwo() );
зы. смысл в том, что без проверок это не тест, а просто выполнение каких-то действий
А так делать нельзя:
if isElementPresent() { System.out.println("Все хорошо") else System.out.println("Элемент не найден")так как по-любому тест завершиться успешно
#7
Отправлено 10 апреля 2012 - 08:04
А так делать нельзя:
if isElementPresent() { System.out.println("Все хорошо") else System.out.println("Элемент не найден")так как по-любому тест завершиться успешно
Понятно, что тест будет всегда успешным
можно ввести переменную типо int not_found_element = 0;
if isElementPresent() { System.out.println("Все хорошо") } else { System.out.println("Элемент не найден") not_found_element++; }
потом в конце теста ввести проверку, т.е. если not_found_element - равен 0, то кейс пассед, если не равен, то faild
Если надо проверить например сотни таких элементов, то не нужно писать сотни if, а сделать один метод, который будет делать данную проверку
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных