вот так заработало
window = driver.findElement(By.xpath("*[@ClassName='TfrmSetting']")).isEnabled();
39 публикаций создано pbezpal (учитываются публикации только с 30 марта 2023)
Отправлено автор: 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 - 11:30 в Автоматизированное тестирование
Как в WinAppDriver кликнуть на tree?
Отправлено автор: 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 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 19 июня 2019 - 12:39 в Selenium - Functional Testing
При выполнении теста у меня в ветке verify element present выдаёт такое сообщение. Я так понимаю Selenuim IDE не умеет работать с AJAX?
Отправлено автор: pbezpal 21 июня 2019 - 14:49 в Автоматизированное тестирование
Всем привет.
Начал только разбираться в этой связке. Сделал несколько тестов, все работает, как ни странно) Но вот столкнулся с такой задачкой. Открываю форму поиска серверов и хотелось бы найти нужный сервер и выбрать его. Например, выбрать сервер выделенный красным с IP 10.10.11.181. Спасибо.
Отправлено автор: 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 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 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)
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru