Всем привет! Уже всю голову сломал себе, но хоть убей не понимаю, почему не передается параметр переменной в качестве значения атрибута.
39 публикаций создано pbezpal (учитываются публикации только с 05 мая 2023)
Отправлено автор: pbezpal 10 июня 2019 - 11:27 в Selenium - Functional Testing
Отправлено автор: pbezpal 10 июня 2019 - 11:33 в Selenium - Functional Testing
Отправлено автор: pbezpal 19 июня 2019 - 12:39 в Selenium - Functional Testing
При выполнении теста у меня в ветке verify element present выдаёт такое сообщение. Я так понимаю Selenuim IDE не умеет работать с AJAX?
Отправлено автор: pbezpal 01 августа 2019 - 07:22 в Автоматизированное тестирование
Всем привет!
Столкнулся с такой проблемой, что действия Actions не выполняются одно за другим.
Первый actions
public void callPropertiesClient(){ if(isWaitElement(nameIconClientBy, 10, "",7)) { actions.contextClick(driver.findElement(nameIconClientBy)).perform(); driver.findElement(contextMenuBy).findElement(propertiesBy).click(); } }
Здесь кликаю правой кнопкой мыши на иконку на рабочем столе и нажимаю “Свойства”
Далее меняю свойство запуска программы и нажимаю ОК
public WebElement getElementTextObject(){ return driver.findElements(textFieldBy).get(1); } public void setPropertiesClient(String textObject){ getElementTextObject().clear(); getElementTextObject().sendKeys(textObject); } public void clickOkPropertiesClient(){ driver.findElement(buttonOkBy).click(); if(isWaitElement(buttonContinuesBy, 10, "", 7)) driver.findElement(buttonContinuesBy).click(); }
Затем двойным кликом запускаю программу
public void clickIconClient(){ if(isWaitElement(nameIconClientBy, 10, "",7)) actions.doubleClick(driver.findElement(nameIconClientBy)).perform(); }
Так вот этот двойной клики по иконке не отрабатывает. Хотя если запускаю просто двойной клик, то работает прекрасно. Как сделать, чтобы второй actions отрабатывал? Спасибо!
Отправлено автор: pbezpal 01 июля 2019 - 11:30 в Автоматизированное тестирование
Как в WinAppDriver кликнуть на tree?
Отправлено автор: pbezpal 17 июня 2019 - 08:42 в Автоматизированное тестирование
Кажись понял, почему ошибка появляется. При закрытии, приложение требует подтверждения, т.е. его по другому надо обрабатывать
Отправлено автор: 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 17 июня 2019 - 08:45 в Автоматизированное тестирование
Да, попробовал открыть другое приложение, которое не требует подтверждения при закрытии и всё отработало корректно) УРА!!! Всем спасибо)
Отправлено автор: 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 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 27 июня 2019 - 14:13 в Автоматизированное тестирование
Всем привет! Уже себе всю голову сломал, но так и не смог постичь тонкости Winium'a
У меня открывается окно, в котором я перехожу на вкладку "Управление". Когда переходу на вкладку, появляются элементы, с которыми нужно взаимодействовать. Но т.к. начал только разбираться с Winium, не хватает знаний, как добраться до этой самой кнопки.
Уже и вверх ходил, через запрос xpath "parent:: " и мне кажется чего только не перепробовал уже, но не находит кнопку и все.
Отправлено автор: pbezpal 01 июля 2019 - 12:45 в Автоматизированное тестирование
Попробую расписать поподробнее:
Тестирую программу на Windows 10.
Сейчас дохожу до вкладки “Управление” и дальше Winium не видит кнопки “Открыть”.
Как видно на последнем изображении, элементов “Управление” Winium определяет всего один и это элемент вкладки. Элементов кнопок с названием “Открыть” вообще нет. Можно ли как-то достучаться до элементов кнопок и элемента “Управление” панель? Может есть у кого какие идеи или мысли, потому как у меня пока уже мыслей нет. И в интернете ничего не нашёл подходящего
Отправлено автор: pbezpal 21 июня 2019 - 14:49 в Автоматизированное тестирование
Всем привет.
Начал только разбираться в этой связке. Сделал несколько тестов, все работает, как ни странно) Но вот столкнулся с такой задачкой. Открываю форму поиска серверов и хотелось бы найти нужный сервер и выбрать его. Например, выбрать сервер выделенный красным с IP 10.10.11.181. Спасибо.
Отправлено автор: pbezpal 26 июня 2019 - 14:57 в Автоматизированное тестирование
вот так заработало
window = driver.findElement(By.xpath("*[@ClassName='TfrmSetting']")).isEnabled();
Отправлено автор: 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 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; }
Отправлено автор: 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 13 мая 2020 - 09:49 в Про тестирование обо всём подряд
Всем привет! У нас сейчас занимаются написанием автотестов два человека, один из которых я.
Я выношу всю реализацию в раздел main, а сами тесты выношу в раздел test
Коллега все делает в разделе test
Интересно ваше мнение по поводу того, как лучше реализовывать проект. Всё делать в разделе test или всё же всю обработку выносить в раздел main. Спасибо
Отправлено автор: 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 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 10 сентября 2019 - 11:06 в Автоматизированное тестирование
Selenium IDE (если еще жив), Katalon
Жив. Недавно обучение по нему прошёл
Отправлено автор: pbezpal 12 июля 2019 - 11:15 в Автоматизированное тестирование
Всем привет!
Столкнулся с такой проблемой. Сделал параметризированные тесты
package ru.minicom.itphone.client; import org.junit.Assert; 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; } @Parameterized.Parameters(name = "{0}") public static Collection<String> Text(){ ArrayList<String> data = new ArrayList<>(); String tempStr = ""; for (char c : str.toCharArray()){ tempStr = tempStr + c; if(tempStr.length() > 32) break; data.add(tempStr); } return data; } /*@Parameterized.Parameters(name = "{0}") public static Collection<String> textServer(){ ArrayList<String> data = new ArrayList<>(); String tempStr = ""; for (char c : str.toCharArray()){ tempStr = tempStr + c; data.add(tempStr); } return data; }*/ @ParameterizedTest @MethodSource("Symbols") public void test_Symbols_Login(char symbol){ windowLogin.setLogin(Character.toString(symbol)); char[] rez = windowLogin.getLogin().toCharArray(); assertTrue(symbol == rez[0]); } @ParameterizedTest @MethodSource("Text") public void test_Text_Login(String text){ windowLogin.setLogin(text); assertTrue(text.equals(windowLogin.getLogin())); } /*@ParameterizedTest @MethodSource("Symbols") public void test_Symbols_Password(char symbol){ windowLogin.setPassword(Character.toString(symbol)); System.out.println("Password: " + windowLogin.getPassword()); char[] rez = windowLogin.getPassword().toCharArray(); assertTrue(symbol == rez[0]); }*/ @ParameterizedTest @MethodSource("Symbols") public void test_Symbols_Server(char symbol){ windowLogin.setServer(Character.toString(symbol)); char[] rez = windowLogin.getServer().toCharArray(); assertTrue(symbol == rez[0]); } /*@ParameterizedTest @MethodSource("textServer") public void test_Text_Server(String text){ windowLogin.setServer(text); assertTrue(text.equals(windowLogin.getServer())); }*/ @AfterAll public static void tearDown() { windowLogin.clickYesExitConfirmForm(); Assert.assertFalse(windowLogin.isAvailableLoginWindow()); if(shell != null) shell.destroy(); } }
Подключил необходимые библиотеки в maven
<?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>TestITPhoneClient</groupId> <artifactId>ru.minicom.itphone.client</artifactId> <version>1.0</version> <name>TestITPhoneClient</name> <url>http://maven.apache.org</url> <properties> <!--region General--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!--<java.version>11</java.version>--> <java.version>1.8</java.version> <!--endregion--> <!--region Libs --> <selenium-java.version>3.141.59</selenium-java.version> <sikulixapi.version>1.1.2</sikulixapi.version> <jadb.version>94ebf38</jadb.version> <junit.version>4.12</junit.version> <junit.jupiter.version>5.5.0</junit.jupiter.version> <junit.parameters.version>1.1.1</junit.parameters.version> <ant.version>1.10.6</ant.version> <!--endregion--> <!--region Plugins--> <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <maven-jar-plugin.version>3.1.2</maven-jar-plugin.version> <!--endregion--> </properties> <repositories> <repository> <id>Mulesoft</id> <url>https://repository.mulesoft.org/nexus/content/repositories/public</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>${selenium-java.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/pl.pragmatists/JUnitParams --> <dependency> <groupId>pl.pragmatists</groupId> <artifactId>JUnitParams</artifactId> <version>${junit.parameters.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> <dependency><!-- https://mvnrepository.com/artifact/com.sikulix/sikulixapi --> <groupId>com.sikulix</groupId> <artifactId>sikulixapi</artifactId> <version>${sikulixapi.version}</version> <exclusions> <exclusion> <groupId>com.github.vidstige</groupId> <artifactId>jadb</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.vidstige</groupId> <artifactId>jadb</artifactId> <version>${jadb.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.maven.surefire/surefire-junit4 --> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit4</artifactId> <version>3.0.0-M3</version> </dependency> <dependency> <groupId>io.appium</groupId> <artifactId>java-client</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit-dep --> <!--<dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>4.11</version> <type>pom</type> <scope>test</scope> </dependency>--> <!-- https://mvnrepository.com/artifact/org.junit/junit5-engine --> <dependency> <groupId>org.junit</groupId> <artifactId>junit5-engine</artifactId> <version>5.0.0-ALPHA</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-commons --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-commons</artifactId> <version>1.5.0</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine --> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.5.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.0.0-M3</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.version}</version> </plugin> <!--<plugin> <artifactId>maven-jar-plugin</artifactId> <version>${maven-jar-plugin.version}</version> <configuration> <archive> <manifest> <mainClass>ru.minicom.itphone.client.RunTests</mainClass> </manifest> </archive> </configuration> </plugin>--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M3</version> <configuration> <trimStackTrace>false</trimStackTrace> <includes> <include>**\WindowLoginTest.java</include> <include>**\WindowMainTest.java</include> <include>**\WindowSearchContactsTest.java</include> <include>**\WindowCallsTest.java</include> <!--<include>**\WindowLoginParametersTest.java</include>--> </includes> <!--<excludes> <exclude>**\NewTestClient.java</exclude> </excludes>--> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.0.0-M3</version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-failsafe-plugin --> <!--<dependencies> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.0.0-M3</version> <scope>test</scope> </dependency> </dependencies>--> </plugin> <plugin> <groupId>org.jvnet.maven-antrun-extended-plugin</groupId> <artifactId>maven-antrun-extended-plugin</artifactId> <dependencies> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant-junit</artifactId> <version>${ant.version}</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant-trax</artifactId> <version>1.8.0</version> </dependency> </dependencies> <executions> <execution> <id>test-reports</id> <phase>test</phase> <configuration> <tasks> <junitreport todir="target/surefire-reports"> <fileset dir="target/surefire-reports"> <include name="**/*.xml" /> </fileset> <report format="noframes" todir="target/surefire-reports/html" /> </junitreport> <!--<tstamp> <format property="datetime" pattern="yyyyMMddHHmmss" /> </tstamp>--> <move file="target/surefire-reports/html/junit-noframes.html" tofile="target/surefire-reports/html/client-test-report.html" /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
Теперь при запуске тестов из консоли
mvn compile && mvn package -Dmaven.test.skip=true && mvn test
У меня вываливается сообщение об ошибке
[INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- июл 12, 2019 2:15:13 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable WARNING: TestEngine with ID 'junit-vintage' failed to discover tests org.junit.platform.commons.JUnitException: Failed to parse version of junit:junit: 3.8.1 at org.junit.vintage.engine.JUnit4VersionCheck.parseVersion(JUnit4VersionCheck.java:54) at org.junit.vintage.engine.JUnit4VersionCheck.checkSupported(JUnit4VersionCheck.java:37) at org.junit.vintage.engine.JUnit4VersionCheck.checkSupported(JUnit4VersionCheck.java:32) at org.junit.vintage.engine.VintageTestEngine.discover(VintageTestEngine.java:61) at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:168) at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:155) at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:120) at org.apache.maven.surefire.junitplatform.TestPlanScannerFilter.accept(TestPlanScannerFilter.java:56) at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:102) at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:143) at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124) at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345) at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
Отправлено автор: pbezpal 15 июля 2019 - 12:36 в Автоматизированное тестирование
Если в IDE нормально стартует то проблема где-то в зависимостях которые вы в pom прописали. У вас же была ошибка и вы туда какую-то зависимость подтянули, вот отсюда и нужна плясать
Все оказалось проще! Junit 5 не поддерживает аннотацию
@RunWith(Parameterized.class)
После того, как убрал аннотацию ошибка перестала появляться, но и тесты из консоли перестали запускаться(((
Отправлено автор: pbezpal 15 июля 2019 - 13:37 в Автоматизированное тестирование
И это победил)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M3</version> <configuration> <trimStackTrace>false</trimStackTrace> <includes> <!--<include>**\WindowLoginTest.java</include> <include>**\WindowMainTest.java</include> <include>**\WindowSearchContactsTest.java</include> <include>**\WindowCallsTest.java</include>--> <include>**\testWindowLogin.java</include> </includes> <!--<excludes> <exclude>**\NewTestClient.java</exclude> </excludes>--> </configuration> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-surefire-provider --> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.3.2</version> <!--<scope>test</scope>--> </dependency> </dependencies> </plugin>
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru