Необходимо работать с результатами поиска, но тест их ищет раньше, чем они появляются на странице.
Помог Thread.sleep(2000);, но запросы же могут и дольше выполняться..
Хочу сделать ожидание завершения ajax-запросов на странице. Поиск в гугле выдал только решение от 2011 года такого плана http://habrahabr.ru/post/111649/, насколько я понял это для селениума 1.0.
Каким образом сделать такое ожидание? Может есть другой способ?
Добрый день. Решил для запуска тестов использовать HtmlUnitDriver. Сразу столкнулся с проблемой.В BeforeTest я в зависимости от указанного в testNG.xml файле параметра запускаю тест в определенном браузере. Туда же я втулил одним из вариантов выполнения тестов HtmlUnitDriver. В итоге при запуске тестов вылетает ошибка, в чем причина понять не могу. Подскажите пожалуйста, что делаю не так.
Вот лог ошибок:
java.lang.NullPointerException
at basicTests.BasicTest.beforeTest(BasicTest.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:215)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
at org.testng.TestRunner.beforeRun(TestRunner.java:656)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:122)
Disconnected from the target VM, address: '127.0.0.1:54202', transport: 'socket'
Ну и здесь у меня создается екземпляр драйвера:
if (browser.equalsIgnoreCase("firefox")){
driver = new FirefoxDriver();
}
else if (browser.equalsIgnoreCase("chrome")){
System.setProperty("webdriver.chrome.driver", "C:\\tools\\drivers\\chromedriver.exe");
driver = new ChromeDriver();
}
else if (browser.equalsIgnoreCase("opera")){
System.setProperty("webdriver.opera.driver", "C:\\tools\\drivers\\operadriver.exe");
driver = new OperaDriver();
}
else if (browser.equalsIgnoreCase("safari")){
System.setProperty("webdriver.safari.driver", "C:\\tools\\drivers\\safaridriver.exe");
driver = new SafariDriver();
}
else if (browser.equalsIgnoreCase("ie")){
System.setProperty("webdriver.ie.driver", "C:\\tools\\drivers\\IEDriverServer.exe");
driver = new InternetExplorerDriver();
}
else if (browser.equalsIgnoreCase("html")){
System.setProperty("webdriver.html.driver", "C:\\tools\\drivers\\selenium-htmlunit-driver-2.49.0.jar");
HtmlUnitDriver driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
System.out.println("create html driver");
}
1. Есть некая страница. В код вставлен кусок, ведущий на отдельный проект (через него реализована поддержка).
Загрузка страницы занимает 2 - 60 секунд (это нормально по некоторым причинам, не суть).
После загрузки фокус может оказаться основной странице, тогда драйвер дожидается появления элемента WebDriver.WaitToBeClickable... и после этого можно перейти.
Или фокус может оказаться на фрейме поддержки.
При этом какой процесс раньше завершиться не понятно.
Может полностью загрузиться первой фрейм (по факту - небольшое окно сбоку) поддержки. Могут почти одновременно, может позже.
1.1. Как сделать оптимальное ожидание появления элемента на основном фрейме (странице)?
1.2. Как сделать переключение во время ожидания, при том что переключиться на фрейм поддержки может не сразу, а в какой-то момент загрузки?
2. Есть некоторые меню с выпадающими по клику действиями.
Сделать для действий inspectElement не получается, т.к. при клике правой кнопкой меню сразу пропадает. Чтобы понять как кликнуть webdriver'ом на какой-либо пункт выпадающего меню, нужно лезть в код страницы?
Есть тест, листенер, и аналайзер. Необходимо перезапускать упавший тест "n" раз, если он не выполнился то выдавать ошибку и продолжать тест со следующим параметром @dataprovider
Результаты прохождения тестов:
-первый тест запускается один раз - результат - success
-второй тест запускается один раз - результат - success
-третий тест запускается 2 раза - результат - skip,failed
-четвертый тест запускается 2 раза - результат - success,success
зы. пятый и так далее тесты будут запускаться все по 2 раза в не зависимости от статуса. А должны при статусе success отрабатывать всего один раз (как при выполнении первых двух тестов)
Вопрос в следующем... что надо перезаписать(прописать) в ITestResult (public void onTestSuccess / onTestFailure) для моего RetryListener.class чтобы после успешного теста, запускался следующий объект из dataprovider?
@Listeners({RetryListener.class})
public class simpletest {
WebDriver driver;
String baseURL = "http://localhost/";
@DataProvider
private Object[][] addUrl() {
return new Object[][] {
{"page1"},
{"page2"},
{"page3"},
{"page4"},
};
}
@Test(dataProvider="addUrl",retryAnalyzer=RetryAnalyzer.class) //Сам тест
driver = new FirefoxDriver();
driver.get(baseURL+addUrl);
...............
Если тест сфейлился то перезапускаем его столько раз (сколько указано в maxRetryCount=2)
public class RetryAnalyzer implements IRetryAnalyzerWithSkip {
private int retryCount = 0;
private int maxRetryCount = 2;
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
@Override
public boolean isRetryable() {
return retryCount < maxRetryCount;
}
public class RetryListener extends TestListenerAdapter {
public void onTestFailure(ITestResult tr) { if (retryAnalyzer == null || !(retryAnalyzer instanceof IRetryAnalyzerWithSkip)) {
super.onTestFailure(tr);
} else if (((IRetryAnalyzerWithSkip) retryAnalyzer).isRetryable()) {
tr.setStatus(ITestResult.SKIP);
super.onTestSkipped(tr);
} else {
super.onTestFailure(tr);
}
}
}
Начинаю изучать тестирование, прочитал книгу Савина и Канера, теперь ищу данную книгу, безрезультатно.
-"Cem Kaner, James Bach, Bret Pettichord "Lessons Learned in Software Testing"
У кого есть данная книга? и кто может поделиться, скиньте пожалуйста на ФО и поделитесь ссылкой.