Перейти к содержимому

Публикации pbezpal

39 публикаций создано pbezpal (учитываются публикации только с 26 апреля 2023)



#172895 Winium не возвращает значение в поле типа password

Отправлено автор: pbezpal 12 июля 2019 - 06:44 в Автоматизированное тестирование

Привет!
 
Сразу скажу, что хакерством не занимаюсь, но начал изучать Winium, JUnit со всеми их возможностями.
 
Столкнулся вот с какой проблемой, делаю параметрическое тестирование на допустимые символы в окне авторизации и поле пароль не возвращает значение для сравнения. Вот сам тест
 
 
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();
    }
}

 




#172793 WinAppDriver кликнуть по tree

Отправлено автор: pbezpal 01 июля 2019 - 11:30 в Автоматизированное тестирование

Как в WinAppDriver кликнуть на tree?




#173152 Не отрабатывает второй actions

Отправлено автор: 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 отрабатывал? Спасибо!




#173096 JUnit 5 Timeout

Отправлено автор: 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 секунд");
}

В первом случае понятная ситуация, а вот почему во втором тест не падает?




#174261 Ошибка при запуске selenoid в docker-compose

Отправлено автор: pbezpal 29 октября 2019 - 13:59 в Управление тестированием

Решил проблему. Было некорректное имя конфигурационного файла. Должно быть $PWD/selenoid/browsers.json, а у меня было $PWD/selenoid/browser.json

Мучался несколько часов с этой ошибкой. Фух




#172892 JUnit + Jupiter ошибка инициализации

Отправлено автор: 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)

 




#172893 JUnit + Jupiter ошибка инициализации

Отправлено автор: 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>



#174260 Ошибка при запуске selenoid в docker-compose

Отправлено автор: pbezpal 29 октября 2019 - 13:17 в Управление тестированием

Всем привет! Я только начал изучать docker и как с ним работать. Никак не получается запустить selenoid в docker-compose

Создал docker-compose.yml

 

version: '3'
services:
  selenoid:
    network_mode: bridge
    image: aerokube/selenoid:latest-release
    container_name: "selenoid"
    volumes:
      - "$PWD/selenoid:/etc/selenoid"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "$PWD/selenoid/video:/opt/selenoid/video"
      - "$PWD/selenoid/logs:/opt/selenoid/logs"
    environment:
      - OVERRIDE_VIDEO_OUTPUT_DIR=$PWD/selenoid/video
    command: ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs"]
    ports:
      - "4444:4444"
  selenoid-ui:
    image: aerokube/selenoid-ui
    container_name: "selenoid-ui"
    network_mode: bridge
    links:
      - selenoid
    ports:
      - "8080:8080"
    command: ["--selenoid-uri","http://selenoid:4444"]
  jenkins:
    image: "jenkins:latest"
    container_name: "jenkins"
    volumes:
      - "/home/sysadm/rmo_test_docker/jenkins:/var/jenkins_home"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      JENKINS_HOST_HOME: "/home/sysadm/jenkins_home"
    ports:
      - 8088:8080
      - 5000:5000
      - 50000:50000

jenkins и selenoid-ui запускаются и работают корректно, но selenoid выдает такое сообщение в логи:

sysadm@ubuntu:~/rmo_test_docker$ docker-compose logs -f selenoid
Attaching to selenoid
selenoid       | 2019/10/29 12:54:44 [-] [INIT] [Loading configuration files...]
selenoid       | 2019/10/29 12:54:44 [-] [INIT] [/usr/bin/selenoid: browsers config: read error: open /etc/selenoid/browsers.json: no such file or directory]
selenoid       | 2019/10/29 12:55:57 [-] [INIT] [Loading configuration files...]
selenoid       | 2019/10/29 12:55:57 [-] [INIT] [/usr/bin/selenoid: browsers config: read error: open /etc/selenoid/browsers.json: no such file or directory]
selenoid exited with code 1

Кто сталкивался с такой проблемой и, как победили её?




#172765 WinAppDriver + Selenium не может найти элемент

Отправлено автор: 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);

Но сдаётся мне это не совсем правильно




#172796 Winium не находит кнопку

Отправлено автор: pbezpal 01 июля 2019 - 12:45 в Автоматизированное тестирование

Попробую расписать поподробнее:

 

Тестирую программу на Windows 10.

  1. Авторизуюсь на сервере
  2. После авторизации, программа сворачивается в иконку, которая находится в tree
  3. Вызываю окно настроек (см. рис. 1)
  4. Переключаюсь на вкладку “Управление” (см. рис. 2)
  5. Во вкладке “Управление” нужно нажать на кнопку “Открыть”

Сейчас дохожу до вкладки “Управление” и дальше Winium не видит кнопки “Открыть”.

Как видно на последнем изображении, элементов “Управление” Winium определяет всего один и это элемент вкладки. Элементов кнопок с названием “Открыть” вообще нет. Можно ли как-то достучаться до элементов кнопок и элемента “Управление” панель? Может есть у кого какие идеи или мысли, потому как у меня пока уже мыслей нет. И в интернете ничего не нашёл подходящего

Прикрепленные изображения

  • 1.png
  • 2.png
  • analize.png



#172762 WinAppDriver + Selenium не может найти элемент

Отправлено автор: 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;
}
}
}

Запускаю тест, запускается моя программа, но проверка не проходит.

Но если программа была уже запущена до запуска теста, тогда тест проходит. Что это за баг такой?




#172638 Selenium IDE - Ajax Wait timed out after 30000ms

Отправлено автор: pbezpal 19 июня 2019 - 12:39 в Selenium - Functional Testing

При выполнении теста у меня в ветке verify element present выдаёт такое сообщение. Я так понимаю Selenuim IDE не умеет работать с AJAX?




#172742 Winium Desktop Driver xpath

Отправлено автор: 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 запросом тоже самое




#172667 Selenium + Winium.Desktop.Driver получить данные формы

Отправлено автор: pbezpal 21 июня 2019 - 14:49 в Автоматизированное тестирование

Всем привет.

 

Начал только разбираться в этой связке. Сделал несколько тестов, все работает, как ни странно) Но вот столкнулся с такой задачкой. Открываю форму поиска серверов и хотелось бы найти нужный сервер и выбрать его. Например, выбрать сервер выделенный красным с IP 10.10.11.181. Спасибо.

Прикрепленные изображения

  • serverFinder.jpg

Прикрепленные файлы

  • Прикрепленный файл  Options.txt   2,69К   3 Количество загрузок:



#172753 Winium не находит кнопку

Отправлено автор: pbezpal 27 июня 2019 - 14:13 в Автоматизированное тестирование

Всем привет! Уже себе всю голову сломал, но так и не смог постичь тонкости Winium'a

 

У меня открывается окно, в котором я перехожу на вкладку "Управление". Когда переходу на вкладку, появляются элементы, с которыми нужно взаимодействовать. Но т.к. начал только разбираться с Winium, не хватает знаний, как добраться до этой самой кнопки.

 

Уже и вверх ходил, через запрос xpath "parent:: " и мне кажется чего только не перепробовал уже, но не находит кнопку и все.

 

Прикрепленные изображения

  • elementButton.png



#172743 Winium Desktop Driver xpath

Отправлено автор: pbezpal 26 июня 2019 - 14:57 в Автоматизированное тестирование

вот так заработало

window = driver.findElement(By.xpath("*[@ClassName='TfrmSetting']")).isEnabled();



#173153 Как передать разные capabilities? (WebDriver)

Отправлено автор: 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;
}



#173286 Selenide allure репорт генирируется без шагов и скриншотов

Отправлено автор: 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;
}

https://habr.com/ru/...ru/blog/337386/

Прикрепленные изображения

  • allure.png



#172616 Sikuli - ошибка при закрытии приложения

Отправлено автор: pbezpal 17 июня 2019 - 08:45 в Автоматизированное тестирование

Да, попробовал открыть другое приложение, которое не требует подтверждения при  закрытии и всё отработало корректно) УРА!!! Всем спасибо)  :smile:




#176506 Как лучше организовать архитектуру тестов

Отправлено автор: pbezpal 13 мая 2020 - 09:49 в Про тестирование обо всём подряд

Всем привет! У нас сейчас занимаются написанием автотестов два человека, один из которых я.

Я выношу всю реализацию в раздел main, а сами тесты выношу в раздел test

 

ffeeb5c57f3a99e8e9191969d4a0e0ae0af78e19

 

Коллега все делает в разделе test

ccc0831c122b5337e016d1493db989b756c15584

 

Интересно ваше мнение по поводу того, как лучше реализовывать проект. Всё делать в разделе test или всё же всю обработку выносить в раздел main. Спасибо




#172615 Sikuli - ошибка при закрытии приложения

Отправлено автор: pbezpal 17 июня 2019 - 08:42 в Автоматизированное тестирование

Кажись понял, почему ошибка появляется. При закрытии, приложение требует подтверждения, т.е. его по другому надо обрабатывать




#172614 Sikuli - ошибка при закрытии приложения

Отправлено автор: 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>

Может кто сталкивался с пободной ошибкой?

 




#172928 Ошибка при запуске тестов из консоли

Отправлено автор: 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>



#172550 Не передаётся значение перменной

Отправлено автор: pbezpal 10 июня 2019 - 11:27 в Selenium - Functional Testing

Всем привет! Уже всю голову сломал себе, но хоть убей не понимаю, почему не передается параметр переменной в качестве значения атрибута.

 

 

Прикрепленные изображения

  • value_var.jpg



#172927 Ошибка при запуске тестов из консоли

Отправлено автор: pbezpal 15 июля 2019 - 12:36 в Автоматизированное тестирование

Если в IDE нормально стартует то проблема где-то в зависимостях которые вы в pom прописали. У вас же была ошибка и вы туда какую-то зависимость подтянули, вот отсюда и нужна плясать

Все оказалось проще! Junit 5 не поддерживает аннотацию 

@RunWith(Parameterized.class)

После того, как убрал аннотацию ошибка перестала появляться, но и тесты из консоли перестали запускаться(((