Разобрался, нужно было подгрузить в pom.xml
<dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.5.0</version> <scope>test</scope> </dependency>
39 публикаций создано pbezpal (учитываются публикации только с 20 апреля 2023)
Отправлено автор: pbezpal 11 июля 2019 - 16:07 в Автоматизированное тестирование
Разобрался, нужно было подгрузить в pom.xml
<dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.5.0</version> <scope>test</scope> </dependency>
Отправлено автор: pbezpal 11 июля 2019 - 16:00 в Автоматизированное тестирование
Всем привет!
Написал параметрический тест. Вроде все тестовые случаи проходит успешно, но почему-то ругается на инициализацию
Class WindowLoginParametersTest
package ru.minicom.itphone.client; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.openqa.selenium.WebDriver; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Collection; import static junit.framework.Assert.assertTrue; @RunWith(Parameterized.class) public class WindowLoginParametersTest { private static String str = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяƒˆŠŒŽ˜šœžŸ¡¢£¥¨ª¯²³´¸¹º¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"; //public static String str = "!\"#$%&"; private static String className = Thread.currentThread().getStackTrace()[1].getClassName(); @ClassRule public static StartingTest startTest = new StartingTest(className); private static Process shell = null; static { try { shell = startTest.getProcess(); } catch (IOException e) { e.printStackTrace(); } } private static WebDriver driver = null; static { try { driver = startTest.getWebDriver(); } catch (MalformedURLException e) { e.printStackTrace(); } } private WindowLogin windowLogin = new WindowLogin(driver); @ClassRule public static FinishedTest finish = new FinishedTest(shell, className); @Before public void setUp() throws MalformedURLException { startTest.getWebDriver(); Assert.assertNotNull("RemoteWebDriver не запущен...",driver); } @After public void tearDown() { windowLogin.clickYesExitConfirmForm(); Assert.assertFalse(windowLogin.isAvailableLoginWindow()); } @Parameterized.Parameters(name = "{0}") public static Collection<Character> data(){ ArrayList<Character> data = new ArrayList<>(); for (char c : str.toCharArray()) data.add(c); return data; } @ParameterizedTest @MethodSource("data") public void testParameters(char symbol){ windowLogin.setLogin(Character.toString(symbol)); char[] rez = windowLogin.getLogin().toCharArray(); assertTrue(symbol == rez[0]); } }
Class StartingTest
package ru.minicom.itphone.client; import org.junit.Assert; import org.junit.rules.TestWatcher; import org.junit.runner.Description; import org.openqa.selenium.WebDriver; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; public class StartingTest extends TestWatcher { private StartTest start = new StartTest(); private Process shell = null; private WebDriver driver = null; private WindowLogin windowLogin = null; private String login = start.getLogin(); private String password = start.getPassword(); private String server = start.getServer(); private String className; private String profile = System.getProperty("user.home") + "\\AppData\\Roaming\\IT-Phone\\Profiles";; public StartingTest(){} public StartingTest(String className){ this.className = className; } @Override public void starting(Description description){ try { Assert.assertTrue("Севрер " + start.getServer() + " недоступен", start.pingServer()); } catch (IOException e) { e.printStackTrace(); } try { shell = getProcess(); System.out.println("Process = " + shell); } catch (IOException e) { e.printStackTrace(); } Assert.assertNotNull("Winium.Desktop.Driver не запущен...", shell); if( ! className.contains("WindowLoginTest") || ! className.contains("WindowLoginParametersTest")){ try { driver = getWebDriver(); System.out.println("Driver = " + driver); } catch (MalformedURLException e) { e.printStackTrace(); } Assert.assertNotNull("RemoteWebDriver не запущен...",driver); windowLogin = new WindowLogin(driver); windowLogin.setDataFields(login, password, server); windowLogin.clickEnterButton(); }else { start.deleteFolderProfile(new File(profile)); } } public WebDriver getWebDriver() throws MalformedURLException { return start.startClient(); } public Process getProcess() throws IOException { return start.RunWinum(); } public String getLogin(){ return login; } }
CLass FinishedTest
package ru.minicom.itphone.client; import org.junit.rules.TestWatcher; import org.junit.runner.Description; public class FinishedTest extends TestWatcher { private WindowMain windowMain = null; private Process shell = null; private String login; private String className; public FinishedTest(WindowMain windowMain, Process shell, String login, String className){ this.windowMain = windowMain; this.shell = shell; this.login = login; this.className = className; } public FinishedTest(Process shell, String className){ this.shell = shell; this.className = className; } @Override public void finished(Description description){ if( ! className.contains("WindowLoginTest") || ! className.contains("WindowLoginParametersTest")) if(windowMain.isAvailableIconAdditionalClientTree()) windowMain.clickExitButton(); if(shell != null) shell.destroy(); } }
Ошибка
java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191) at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128) at org.junit.runners.ParentRunner.validate(ParentRunner.java:416) at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84) at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65) at org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters.<init>(BlockJUnit4ClassRunnerWithParameters.java:27) at org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParametersFactory.createRunnerForTestWithParameters(BlockJUnit4ClassRunnerWithParametersFactory.java:16) at org.junit.runners.Parameterized.createRunnersForParameters(Parameterized.java:313) at org.junit.runners.Parameterized.<init>(Parameterized.java:248) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) at org.junit.vintage.engine.discovery.DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder.buildRunner(DefensiveAllDefaultPossibilitiesBuilder.java:113) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) at org.junit.vintage.engine.discovery.DefensiveAllDefaultPossibilitiesBuilder.runnerForClass(DefensiveAllDefaultPossibilitiesBuilder.java:56) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.vintage.engine.discovery.ClassSelectorResolver.resolveTestClass(ClassSelectorResolver.java:66) at org.junit.vintage.engine.discovery.ClassSelectorResolver.resolve(ClassSelectorResolver.java:47) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:129) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359) at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:174) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:120) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.access$100(EngineDiscoveryRequestResolution.java:53) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext.resolve(EngineDiscoveryRequestResolution.java:227) at org.junit.vintage.engine.discovery.MethodSelectorResolver.resolveParentAndAddFilter(MethodSelectorResolver.java:56) at org.junit.vintage.engine.discovery.MethodSelectorResolver.resolve(MethodSelectorResolver.java:40) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:138) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359) at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:174) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:120) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:87) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:80) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:112) at org.junit.vintage.engine.discovery.VintageDiscoverer.discover(VintageDiscoverer.java:42) at org.junit.vintage.engine.VintageTestEngine.discover(VintageTestEngine.java:62) at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:177) at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:164) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Отправлено автор: pbezpal 29 июля 2019 - 09:20 в Автоматизированное тестирование
Всем привет!
В JUnit 5 появилась новая возможность обработки времени тестов. Я попробовал оба варианта
При таком подходе, если время выполнения теста больше заданного, в моём случае 30 секунд, то тест всё равно выполняется, но на выходе получаю ошибку
@Test void test_Call_Main_Window_Icon_Tree() { assertTimeout(ofSeconds(30), () ->{ windowMain.getIconClientPanelTree().click(); assertTrue(windowMain.isMainWindow(), "Вызов главного окна через иконку в трее не работает"); }, () -> "Тест выполняется больше 30 секунд"); }
Но если использовать такой ассерт, то тест выполняется бесконечно долго и никакой ошибки не выдаёт. Хотя вроде бы тест должен падать без выполнения.
@Test void test_Call_Main_Window_Icon_Tree() { assertTimeoutPreemptively(ofSeconds(30), () ->{ windowMain.getIconClientPanelTree().click(); assertTrue(windowMain.isMainWindow(), "Вызов главного окна через иконку в трее не работает"); }, () -> "Тест выполняется больше 30 секунд"); }
В первом случае понятная ситуация, а вот почему во втором тест не падает?
Отправлено автор: pbezpal 12 августа 2019 - 06:26 в Автоматизированное тестирование
--clean уберите
Зачем? Это никак не влияет на построение репортов!!!
Для прикрепления файлов к тестам нужно использовать аннотацию
@Attachment
Вот мой код
@Attachment(value = "{0}", type = "video/mp4") public byte[] attachVideo(){ try{ String tmpDir = ".\\Videos\\tmp"; String workDir = ".\\Videos"; File video = copyVideo(tmpDir, workDir); return Files.toByteArray(video); } catch (Exception ignored) { return new byte[0]; } }
Для шагов выполнения теста в репорте используется аннотация
@Step
Пример
@Step("Вызываем окно 'Все вызовы' через главное меню") public WindowCalls callWindowCallsMainMenu() { List<WebElement> itemMenu = clickMainMenu(); if (itemMenu.size() > 0) itemMenu.get(0).click(); else System.out.println("Main menu is not available"); return this; }
Отправлено автор: pbezpal 21 июня 2019 - 14:49 в Автоматизированное тестирование
Всем привет.
Начал только разбираться в этой связке. Сделал несколько тестов, все работает, как ни странно) Но вот столкнулся с такой задачкой. Открываю форму поиска серверов и хотелось бы найти нужный сервер и выбрать его. Например, выбрать сервер выделенный красным с IP 10.10.11.181. Спасибо.
Отправлено автор: pbezpal 19 июня 2019 - 12:39 в Selenium - Functional Testing
При выполнении теста у меня в ветке verify element present выдаёт такое сообщение. Я так понимаю Selenuim IDE не умеет работать с AJAX?
Отправлено автор: pbezpal 17 июня 2019 - 08:42 в Автоматизированное тестирование
Кажись понял, почему ошибка появляется. При закрытии, приложение требует подтверждения, т.е. его по другому надо обрабатывать
Отправлено автор: pbezpal 17 июня 2019 - 08:45 в Автоматизированное тестирование
Да, попробовал открыть другое приложение, которое не требует подтверждения при закрытии и всё отработало корректно) УРА!!! Всем спасибо)
Отправлено автор: pbezpal 17 июня 2019 - 08:12 в Автоматизированное тестирование
Всем привет! Начал изучать Sikuli и сразу столкнулся с ошибкой при выполнении функции закрытия приложения. Использую Intelij IDEA
import org.junit.After; import org.junit.Before; import org.junit.Test; import org.sikuli.script.App; public class TestITPhoneAuth { private App itphone; @Before public void setUP(){ itphone = App.open("C:\\Program Files (x86)\\SoftPhone\\CLIENT\\SoftPhoneClient.exe"); } @Test public void TestITPhoneAuthLogin() throws InterruptedException { Thread.sleep(3000); System.out.println("ITPhone open"); } @After public void tearDown(){ itphone.close(); } }
Открывается приложение, но вот ругается на itphone.close();
[log] App.open [11284:] ITPhone open java.lang.NullPointerException at TestITPhoneAuth.tearDown(TestITPhoneAuth.java:23) 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:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) at org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:349) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:314) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:312) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292) at org.junit.runners.ParentRunner.run(ParentRunner.java:396) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Версия JUnit и Sikuli
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Sikuli</groupId> <artifactId>Sikuli</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13-beta-1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.sikulix/sikulixapi --> <dependency> <groupId>com.sikulix</groupId> <artifactId>sikulixapi</artifactId> <version>1.1.2</version> </dependency> </dependencies> </project>
Может кто сталкивался с пободной ошибкой?
Отправлено автор: pbezpal 28 июня 2019 - 10:04 в Автоматизированное тестирование
Решил пока таким способом
ClientSession = new WindowsDriver(new URL("http://127.0.0.1:4723"), cap); ClientSession.quit(); ClientSession = new WindowsDriver(new URL("http://127.0.0.1:4723"), cap);
Но сдаётся мне это не совсем правильно
Отправлено автор: pbezpal 28 июня 2019 - 07:57 в Автоматизированное тестирование
Всем привет! Пробую для автоматизации тестирования связку WinAppDriver + Selenium
package ru.minicom.itphone.client; import io.appium.java_client.windows.WindowsDriver; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.URL; import java.util.concurrent.TimeUnit; public class NewTestClient { private static WindowsDriver ClientSession = null; private static WebElement Result = null; private static String wapPath = "C:\\Program Files (x86)\\Windows Application Driver\\"; private static String wapName = "WinAppDriver.exe"; private static ProcessBuilder wap; private static Process shell; @BeforeClass public static void setup() { try { /*wap = new ProcessBuilder(wapPath + wapName); shell = wap.start();*/ DesiredCapabilities cap = new DesiredCapabilities(); //cap.setCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"); //cap.setCapability("platformName", "Windows"); //cap.setCapability("deviceName", "WindowsPC"); cap.setCapability("app", "C:\\Program Files (x86)\\SoftPhone\\CLIENT\\SoftPhoneClient.exe"); ClientSession = new WindowsDriver(new URL("http://127.0.0.1:4723"), cap); ClientSession.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); } catch (Exception e){ e.printStackTrace(); }finally { } } @Test public void checkLoginPage(){ System.out.println(checkLoginWindow()); Assert.assertTrue(checkLoginWindow()); } @AfterClass public static void AfterClass(){ Result = null; if(ClientSession != null){ ClientSession.quit(); } ClientSession = null; //shell.destroy(); } public boolean checkLoginWindow(){ try{ ClientSession.findElementByClassName("TfrmLogin"); return true; }catch (Exception e){ return false; } } }
Запускаю тест, запускается моя программа, но проверка не проходит.
Но если программа была уже запущена до запуска теста, тогда тест проходит. Что это за баг такой?
Отправлено автор: pbezpal 01 июля 2019 - 11:30 в Автоматизированное тестирование
Как в WinAppDriver кликнуть на tree?
Отправлено автор: pbezpal 26 июня 2019 - 14:47 в Автоматизированное тестирование
Всем привет!
Разбираюсь с этим зверем и что-то никак не могу познать Дзен
Делаю тест. Вот так тест успешно отрабатывает:
@Test public void testIconFavorites() throws FindFailed { additionalIconTree = new AdditionalIconTree(screen, driver); additionalIconTree.loginServer(login, password, server); additionalIconTree.openWindowSettings(login); window = driver.findElement(By.className("TfrmSetting")).isEnabled(); Assert.assertTrue(window); }
А так долго висит
@Test public void testIconFavorites() throws FindFailed { additionalIconTree = new AdditionalIconTree(screen, driver); additionalIconTree.loginServer(login, password, server); additionalIconTree.openWindowSettings(login); window = driver.findElement(By.xpath("//*[@ClassName='TfrmSetting']")).isEnabled(); //Поменял на xpath запрос Assert.assertTrue(window); }
В чём я не прав и почему в одном случае всё корректно работает. В другом не работает!
Вроде написал xpath запросом тоже самое
Отправлено автор: pbezpal 26 июня 2019 - 14:57 в Автоматизированное тестирование
вот так заработало
window = driver.findElement(By.xpath("*[@ClassName='TfrmSetting']")).isEnabled();
Отправлено автор: pbezpal 25 июня 2019 - 11:25 в Автоматизированное тестирование
Добавил в проверку ожидание
//Здесь проверяем, что элемент mainWindowBy существует public boolean checkMainWindow(){ try{ new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(mainWindowBy)); return true; }catch(NoSuchElementException e){ return false; } }
И получил ошибку
"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\lib\idea_rt.jar=21067:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\Project\ITPhone_Firelink\ver.8.0\Tests\ClientTest\target\test-classes;D:\Project\ITPhone_Firelink\ver.8.0\Tests\ClientTest\target\classes;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-java\3.141.59\selenium-java-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-api\3.141.59\selenium-api-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver\3.141.59\selenium-chrome-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-edge-driver\3.141.59\selenium-edge-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver\3.141.59\selenium-firefox-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver\3.141.59\selenium-ie-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-opera-driver\3.141.59\selenium-opera-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver\3.141.59\selenium-remote-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-safari-driver\3.141.59\selenium-safari-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-support\3.141.59\selenium-support-3.141.59.jar;C:\Users\pbezpal\.m2\repository\net\bytebuddy\byte-buddy\1.8.15\byte-buddy-1.8.15.jar;C:\Users\pbezpal\.m2\repository\org\apache\commons\commons-exec\1.3\commons-exec-1.3.jar;C:\Users\pbezpal\.m2\repository\com\google\guava\guava\25.0-jre\guava-25.0-jre.jar;C:\Users\pbezpal\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\pbezpal\.m2\repository\org\checkerframework\checker-compat-qual\2.0.0\checker-compat-qual-2.0.0.jar;C:\Users\pbezpal\.m2\repository\com\google\errorprone\error_prone_annotations\2.1.3\error_prone_annotations-2.1.3.jar;C:\Users\pbezpal\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\pbezpal\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\pbezpal\.m2\repository\com\squareup\okhttp3\okhttp\3.11.0\okhttp-3.11.0.jar;C:\Users\pbezpal\.m2\repository\com\squareup\okio\okio\1.14.0\okio-1.14.0.jar;C:\Users\pbezpal\.m2\repository\junit\junit\4.13-beta-1\junit-4.13-beta-1.jar;C:\Users\pbezpal\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\pbezpal\.m2\repository\com\sikulix\sikulixapi\1.1.2\sikulixapi-1.1.2.jar;C:\Users\pbezpal\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\pbezpal\.m2\repository\commons-net\commons-net\3.4\commons-net-3.4.jar;C:\Users\pbezpal\.m2\repository\com\github\tulskiy\jkeymaster\1.2\jkeymaster-1.2.jar;C:\Users\pbezpal\.m2\repository\net\java\dev\jna\jna\4.2.1\jna-4.2.1.jar;C:\Users\pbezpal\.m2\repository\org\slf4j\slf4j-api\1.7.13\slf4j-api-1.7.13.jar;C:\Users\pbezpal\.m2\repository\org\slf4j\slf4j-nop\1.7.25\slf4j-nop-1.7.25.jar;C:\Users\pbezpal\.m2\repository\com\melloware\jintellitype\1.3.7\jintellitype-1.3.7.jar;C:\Users\pbezpal\.m2\repository\com\nativelibs4java\bridj\0.7.0\bridj-0.7.0.jar;C:\Users\pbezpal\.m2\repository\com\google\android\tools\dx\1.7\dx-1.7.jar;C:\Users\pbezpal\.m2\repository\com\sikulix\sikulixlibswin\1.1.1\sikulixlibswin-1.1.1.jar;C:\Users\pbezpal\.m2\repository\com\sikulix\sikulix2tigervnc\2.0.0-SNAPSHOT\sikulix2tigervnc-2.0.0-20180306.143551-15.jar;C:\Users\pbezpal\.m2\repository\com\github\vidstige\jadb\94ebf38\jadb-94ebf38.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 MainPageTest,testCallMainWindowIconTree июн 25, 2019 2:21:23 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS [log] CLICK on L(1648,1060)@S(0)[0,0 1920x1080] (547 msec) org.openqa.selenium.TimeoutException: Expected condition failed: waiting for presence of element located by: By.className: TfrmMain (tried for 60 second(s) with 500 milliseconds interval) at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272) at MainPage.checkMainWindow(MainPage.java:64) at MainPageTest.testCallMainWindowIconTree(MainPageTest.java:43) 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:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:349) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:314) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:312) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292) at org.junit.runners.ParentRunner.run(ParentRunner.java:396) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) Caused by: org.openqa.selenium.NoSuchElementException: Element cannot be found (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 0 milliseconds For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: 'DESKTOP-CBDE5N6', ip: '10.10.11.68', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_201' Driver info: org.openqa.selenium.remote.RemoteWebDriver Capabilities {app: C:\Program Files (x86)\Soft..., args: , debugConnectToRunningApp: false, innerPort: 9998, javascriptEnabled: true, keyboardSimulator: 1, launchDelay: 5, platform: ANY, platformName: ANY} Session ID: AwesomeSession *** Element info: {Using=class name, value=TfrmMain} at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166) at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40) at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80) at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323) at org.openqa.selenium.remote.RemoteWebDriver.findElementByClassName(RemoteWebDriver.java:412) at org.openqa.selenium.By$ByClassName.findElement(By.java:389) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315) at org.openqa.selenium.support.ui.ExpectedConditions$6.apply(ExpectedConditions.java:182) at org.openqa.selenium.support.ui.ExpectedConditions$6.apply(ExpectedConditions.java:179) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:249) ... 27 more Process finished with exit code -1
Отправлено автор: pbezpal 25 июня 2019 - 09:03 в Автоматизированное тестирование
Всем привет!
Написал тест для проверки появления окна при определенных действиях. Ищу окно по параметру className. Вот мой код для проверки существования окна
import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.sikuli.script.FindFailed; import org.sikuli.script.Pattern; import org.sikuli.script.Screen; import java.awt.*; import java.awt.event.KeyEvent; public class MainPage { HelperClass hclass = new HelperClass(); private Screen screen; private WebDriver driver; private By iconAdditionalClientTreeBy = By.name("Поиск контакта"); private By treeBy = By.name("Шеврон уведомления"); private By mainWindowBy = By.className("TfrmMain"); //Вот этот className private Pattern imgIconClientTreeBy = hclass.newPattern("tree.JPG"); private Pattern imgMainWindowMenu = hclass.newPattern("mainWindowMenu.jpg"); private Pattern imgExitButton = hclass.newPattern("exit.jpg"); private Robot robot; public MainPage(Screen screen, WebDriver driver){ this.screen = screen; this.driver = driver; } //Проверяем, есть ли дополнительная иконка клиента public boolean checkIconAdditionalClientTree(){ try{ new WebDriverWait(driver, 60).until(ExpectedConditions.presenceOfElementLocated(iconAdditionalClientTreeBy)); return true; }catch (NoSuchElementException e){ return false; } } public void callMainWindowHotButtons() throws AWTException { robot = new Robot(); if(checkIconAdditionalClientTree()){ robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.VK_SHIFT); robot.keyPress(KeyEvent.VK_F1); } } public void callMainWindowIconTree(String login) throws FindFailed { if(checkIconAdditionalClientTree()){ screen.click(imgIconClientTreeBy); driver.findElement(By.name("[" + login + "] - В сети")).click(); } } //Здесь проверяем, что элемент mainWindowBy существует public boolean checkMainWindow(){ try{ driver.findElement(mainWindowBy); return true; }catch(NoSuchElementException e){ return false; } } public void clickExitButton() throws FindFailed { screen.click(imgMainWindowMenu); screen.click(imgExitButton); } }
Вот тест для проверки окна
import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.RemoteWebDriver; import org.sikuli.script.FindFailed; import org.sikuli.script.Screen; import java.io.File; import java.io.IOException; import java.net.URL; public class MainPageTest { private Process shell; private WebDriver driver; private Screen screen; private String profile = System.getProperty("user.home") + "\\AppData\\Roaming\\IT-Phone\\Profiles";; private boolean windowMain; private String login; private String password; private String server; @Before public void setUp() throws IOException { StartTest start = new StartTest(); shell = start.RunWinum(); start.deleteFolderProfile(new File(profile)); driver = new RemoteWebDriver(new URL("http://localhost:9999"), start.startClient()); screen = new Screen(); } @Test public void testCallMainWindowIconTree() throws FindFailed { MainPage mainPage = new MainPage(screen, driver); LoginPage loginPage = new LoginPage(screen, driver); login = "2001"; password = "o0cJ2uas"; server = "172.22.50.100"; loginPage.enterDataFields(login, password, server); loginPage.clickEnterButton(); mainPage.checkIconAdditionalClientTree(); mainPage.callMainWindowIconTree(login); windowMain = mainPage.checkMainWindow(); mainPage.clickExitButton(); System.out.println(windowMain); Assert.assertTrue(windowMain); } @After public void tearDown(){ shell.destroy(); } }
Тест выдаёт результат false, хотя вижу, что окно появляется
Отправлено автор: pbezpal 25 июня 2019 - 11:35 в Автоматизированное тестирование
Смущает, что UIAVerify не может найти это окно. Может в этом всё дело
Отправлено автор: pbezpal 26 июня 2019 - 07:34 в Автоматизированное тестирование
Спасибо за подсказку) Не прокатило Буду делать проверку через Sikuli
Отправлено автор: pbezpal 03 июля 2019 - 05:53 в Автоматизированное тестирование
Кажется решил проблему
driver.switchTo().activeElement()
Получаю тот самый @ClassName='TfrmMain'
Отправлено автор: pbezpal 12 июля 2019 - 06:44 в Автоматизированное тестирование
package ru.minicom.itphone.client; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.openqa.selenium.WebDriver; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Collection; import static junit.framework.Assert.assertTrue; @RunWith(Parameterized.class) public class WindowLoginParametersTest { //private static String str = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяƒˆŠŒŽ˜šœžŸ¡¢£¥¨ª¯²³´¸¹º¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"; public static String str = "!\"#$%&"; private static StartTest start = new StartTest(); private static Process shell = null; private static WebDriver driver = null; private static WindowLogin windowLogin = null; private static String profile = System.getProperty("user.home") + "\\AppData\\Roaming\\IT-Phone\\Profiles";; @BeforeAll public static void startTest(){ try { Assert.assertTrue("Севрер " + start.getServer() + " недоступен", start.pingServer()); } catch (IOException e) { e.printStackTrace(); } try { shell = start.RunWinum(); } catch (IOException e) { e.printStackTrace(); } Assert.assertNotNull("Winium.Desktop.Driver не запущен...", shell); start.deleteFolderProfile(new File(profile)); try { driver = start.startClient(); } catch (MalformedURLException e) { e.printStackTrace(); } Assert.assertNotNull("RemoteWebDriver не запущен...",driver); windowLogin = new WindowLogin(driver); } @Parameterized.Parameters(name = "{0}") public static Collection<Character> Symbols(){ ArrayList<Character> data = new ArrayList<>(); for (char c : str.toCharArray()) data.add(c); return data; } @ParameterizedTest @MethodSource("Symbols") public void test_Parameters_Login(char symbol){ windowLogin.setLogin(Character.toString(symbol)); char[] rez = windowLogin.getLogin().toCharArray(); assertTrue(symbol == rez[0]); } @ParameterizedTest @MethodSource("Symbols") public void test_Parameters_Password(char symbol){ windowLogin.setPassword(Character.toString(symbol)); char[] rez = windowLogin.getPassword().toCharArray(); assertTrue(symbol == rez[0]); } @ParameterizedTest @MethodSource("Symbols") public void test_Parameters_Server(char symbol){ windowLogin.setServer(Character.toString(symbol)); char[] rez = windowLogin.getServer().toCharArray(); assertTrue(symbol == rez[0]); } @AfterAll public static void tearDown() { windowLogin.clickYesExitConfirmForm(); Assert.assertFalse(windowLogin.isAvailableLoginWindow()); if(shell != null) shell.destroy(); } }
Отправлено автор: pbezpal 01 июля 2019 - 12:45 в Автоматизированное тестирование
Попробую расписать поподробнее:
Тестирую программу на Windows 10.
Сейчас дохожу до вкладки “Управление” и дальше Winium не видит кнопки “Открыть”.
Как видно на последнем изображении, элементов “Управление” Winium определяет всего один и это элемент вкладки. Элементов кнопок с названием “Открыть” вообще нет. Можно ли как-то достучаться до элементов кнопок и элемента “Управление” панель? Может есть у кого какие идеи или мысли, потому как у меня пока уже мыслей нет. И в интернете ничего не нашёл подходящего
Отправлено автор: pbezpal 27 июня 2019 - 14:13 в Автоматизированное тестирование
Всем привет! Уже себе всю голову сломал, но так и не смог постичь тонкости Winium'a
У меня открывается окно, в котором я перехожу на вкладку "Управление". Когда переходу на вкладку, появляются элементы, с которыми нужно взаимодействовать. Но т.к. начал только разбираться с Winium, не хватает знаний, как добраться до этой самой кнопки.
Уже и вверх ходил, через запрос xpath "parent:: " и мне кажется чего только не перепробовал уже, но не находит кнопку и все.
Отправлено автор: pbezpal 10 сентября 2019 - 11:06 в Автоматизированное тестирование
Selenium IDE (если еще жив), Katalon
Жив. Недавно обучение по нему прошёл
Отправлено автор: pbezpal 13 мая 2020 - 09:49 в Про тестирование обо всём подряд
Всем привет! У нас сейчас занимаются написанием автотестов два человека, один из которых я.
Я выношу всю реализацию в раздел main, а сами тесты выношу в раздел test
Коллега все делает в разделе test
Интересно ваше мнение по поводу того, как лучше реализовывать проект. Всё делать в разделе test или всё же всю обработку выносить в раздел main. Спасибо
Отправлено автор: pbezpal 01 августа 2019 - 07:34 в Автоматизированное тестирование
Используйте WebDriverFactory, очень удобная вещь
https://www.selenium...verfactory.html
Вот мой пример, правда с использованием Winium, но думаю смысл понятен
cap = new DesiredCapabilities(); //System.out.println("Инициализирован WebDriver на порту 9999"); cap.setCapability("app", "C:\\Program Files (x86)\\SoftPhone\\CLIENT\\SoftPhoneClient.exe"); //System.out.println("Клиент it-phone запущен"); cap.setCapability("launchDelay", "5"); try { return WebDriverPool.DEFAULT.getDriver(new URL("http://localhost:9999"), cap); } catch (MalformedURLException e) { return null; }
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru