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

Тестирование REST API
онлайн, начало 2 августа
Тестирование юзабилити (usability)
онлайн, начало 4 августа
Школа Тест-Аналитика
онлайн, начало 4 августа
Школа для начинающих тестировщиков
онлайн, начало 5 августа
Фотография

Winium Desktop Driver не находит окно


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 pbezpal

pbezpal

    Активный участник

  • Members
  • PipPip
  • 79 сообщений
  • ФИО:Безпалько Павел

Отправлено 25 июня 2019 - 09:03

Всем привет!

 

Написал тест для проверки появления окна при определенных действиях. Ищу окно по параметру className. Вот мой код для проверки существования окна

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;

import java.awt.*;
import java.awt.event.KeyEvent;

public class MainPage {

HelperClass hclass = new HelperClass();

private Screen screen;
private WebDriver driver;
private By iconAdditionalClientTreeBy = By.name("Поиск контакта");
private By treeBy = By.name("Шеврон уведомления");
private By mainWindowBy = By.className("TfrmMain"); //Вот этот className
private Pattern imgIconClientTreeBy = hclass.newPattern("tree.JPG");
private Pattern imgMainWindowMenu = hclass.newPattern("mainWindowMenu.jpg");
private Pattern imgExitButton = hclass.newPattern("exit.jpg");
private Robot robot;


public MainPage(Screen screen, WebDriver driver){
this.screen = screen;
this.driver = driver;
}

//Проверяем, есть ли дополнительная иконка клиента
public boolean checkIconAdditionalClientTree(){
try{
new WebDriverWait(driver, 60).until(ExpectedConditions.presenceOfElementLocated(iconAdditionalClientTreeBy));
return true;
}catch (NoSuchElementException e){
return false;
}
}


public void callMainWindowHotButtons() throws AWTException {
robot = new Robot();
if(checkIconAdditionalClientTree()){
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_F1);
}
}

public void callMainWindowIconTree(String login) throws FindFailed {
if(checkIconAdditionalClientTree()){
screen.click(imgIconClientTreeBy);
driver.findElement(By.name("[" + login + "] - В сети")).click();
}

}

//Здесь проверяем, что элемент mainWindowBy существует
public boolean checkMainWindow(){
try{
driver.findElement(mainWindowBy);
return true;
}catch(NoSuchElementException e){
return false;
}
}

public void clickExitButton() throws FindFailed {
screen.click(imgMainWindowMenu);
screen.click(imgExitButton);
}

}

 Вот тест для проверки окна

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Screen;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class MainPageTest {

private Process shell;
private WebDriver driver;
private Screen screen;
private String profile = System.getProperty("user.home") + "\\AppData\\Roaming\\IT-Phone\\Profiles";;
private boolean windowMain;
private String login;
private String password;
private String server;

@Before
public void setUp() throws IOException {
StartTest start = new StartTest();
shell = start.RunWinum();
start.deleteFolderProfile(new File(profile));
driver = new RemoteWebDriver(new URL("http://localhost:9999"), start.startClient());
screen = new Screen();
}

@Test
public void testCallMainWindowIconTree() throws FindFailed {
MainPage mainPage = new MainPage(screen, driver);
LoginPage loginPage = new LoginPage(screen, driver);
login = "2001";
password = "o0cJ2uas";
server = "172.22.50.100";
loginPage.enterDataFields(login, password, server);
loginPage.clickEnterButton();
mainPage.checkIconAdditionalClientTree();
mainPage.callMainWindowIconTree(login);
windowMain = mainPage.checkMainWindow();
mainPage.clickExitButton();
System.out.println(windowMain);
Assert.assertTrue(windowMain);
}

@After
public void tearDown(){
shell.destroy();
}
}

Тест выдаёт результат false, хотя вижу, что окно появляется 

 

 

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

  • Прикрепленный файл  classname.jpg   99,26К   0 Количество загрузок:
  • Прикрепленный файл  test_result.jpg   59,97К   0 Количество загрузок:

  • 0

#2 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 25 июня 2019 - 10:31

На скриншоте не видно, что за ошибка, и в каком месте она появляется.

Если в том месте, которое помечено комментарием ("//Здесь проверяем, что элемент mainWindowBy существует"), то зависит от того, было уже окно на экране или только что появилось.


  • 0

#3 pbezpal

pbezpal

    Активный участник

  • Members
  • PipPip
  • 79 сообщений
  • ФИО:Безпалько Павел

Отправлено 25 июня 2019 - 11:25

Добавил в проверку ожидание

//Здесь проверяем, что элемент mainWindowBy существует
public boolean checkMainWindow(){
try{
new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(mainWindowBy));
return true;
}catch(NoSuchElementException e){
return false;
}
}

И получил ошибку

 

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\lib\idea_rt.jar=21067:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\Project\ITPhone_Firelink\ver.8.0\Tests\ClientTest\target\test-classes;D:\Project\ITPhone_Firelink\ver.8.0\Tests\ClientTest\target\classes;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-java\3.141.59\selenium-java-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-api\3.141.59\selenium-api-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver\3.141.59\selenium-chrome-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-edge-driver\3.141.59\selenium-edge-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver\3.141.59\selenium-firefox-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver\3.141.59\selenium-ie-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-opera-driver\3.141.59\selenium-opera-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver\3.141.59\selenium-remote-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-safari-driver\3.141.59\selenium-safari-driver-3.141.59.jar;C:\Users\pbezpal\.m2\repository\org\seleniumhq\selenium\selenium-support\3.141.59\selenium-support-3.141.59.jar;C:\Users\pbezpal\.m2\repository\net\bytebuddy\byte-buddy\1.8.15\byte-buddy-1.8.15.jar;C:\Users\pbezpal\.m2\repository\org\apache\commons\commons-exec\1.3\commons-exec-1.3.jar;C:\Users\pbezpal\.m2\repository\com\google\guava\guava\25.0-jre\guava-25.0-jre.jar;C:\Users\pbezpal\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\pbezpal\.m2\repository\org\checkerframework\checker-compat-qual\2.0.0\checker-compat-qual-2.0.0.jar;C:\Users\pbezpal\.m2\repository\com\google\errorprone\error_prone_annotations\2.1.3\error_prone_annotations-2.1.3.jar;C:\Users\pbezpal\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\pbezpal\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\pbezpal\.m2\repository\com\squareup\okhttp3\okhttp\3.11.0\okhttp-3.11.0.jar;C:\Users\pbezpal\.m2\repository\com\squareup\okio\okio\1.14.0\okio-1.14.0.jar;C:\Users\pbezpal\.m2\repository\junit\junit\4.13-beta-1\junit-4.13-beta-1.jar;C:\Users\pbezpal\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\pbezpal\.m2\repository\com\sikulix\sikulixapi\1.1.2\sikulixapi-1.1.2.jar;C:\Users\pbezpal\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\pbezpal\.m2\repository\commons-net\commons-net\3.4\commons-net-3.4.jar;C:\Users\pbezpal\.m2\repository\com\github\tulskiy\jkeymaster\1.2\jkeymaster-1.2.jar;C:\Users\pbezpal\.m2\repository\net\java\dev\jna\jna\4.2.1\jna-4.2.1.jar;C:\Users\pbezpal\.m2\repository\org\slf4j\slf4j-api\1.7.13\slf4j-api-1.7.13.jar;C:\Users\pbezpal\.m2\repository\org\slf4j\slf4j-nop\1.7.25\slf4j-nop-1.7.25.jar;C:\Users\pbezpal\.m2\repository\com\melloware\jintellitype\1.3.7\jintellitype-1.3.7.jar;C:\Users\pbezpal\.m2\repository\com\nativelibs4java\bridj\0.7.0\bridj-0.7.0.jar;C:\Users\pbezpal\.m2\repository\com\google\android\tools\dx\1.7\dx-1.7.jar;C:\Users\pbezpal\.m2\repository\com\sikulix\sikulixlibswin\1.1.1\sikulixlibswin-1.1.1.jar;C:\Users\pbezpal\.m2\repository\com\sikulix\sikulix2tigervnc\2.0.0-SNAPSHOT\sikulix2tigervnc-2.0.0-20180306.143551-15.jar;C:\Users\pbezpal\.m2\repository\com\github\vidstige\jadb\94ebf38\jadb-94ebf38.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 MainPageTest,testCallMainWindowIconTree
июн 25, 2019 2:21:23 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
[log] CLICK on L(1648,1060)@S(0)[0,0 1920x1080] (547 msec)


org.openqa.selenium.TimeoutException: Expected condition failed: waiting for presence of element located by: By.className: TfrmMain (tried for 60 second(s) with 500 milliseconds interval)


at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272)
at MainPage.checkMainWindow(MainPage.java:64)
at MainPageTest.testCallMainWindowIconTree(MainPageTest.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:349)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:314)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:312)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292)
at org.junit.runners.ParentRunner.run(ParentRunner.java:396)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.openqa.selenium.NoSuchElementException: Element cannot be found (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-CBDE5N6', ip: '10.10.11.68', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_201'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities {app: C:\Program Files (x86)\Soft..., args: , debugConnectToRunningApp: false, innerPort: 9998, javascriptEnabled: true, keyboardSimulator: 1, launchDelay: 5, platform: ANY, platformName: ANY}
Session ID: AwesomeSession
*** Element info: {Using=class name, value=TfrmMain}
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByClassName(RemoteWebDriver.java:412)
at org.openqa.selenium.By$ByClassName.findElement(By.java:389)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
at org.openqa.selenium.support.ui.ExpectedConditions$6.apply(ExpectedConditions.java:182)
at org.openqa.selenium.support.ui.ExpectedConditions$6.apply(ExpectedConditions.java:179)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:249)
... 27 more




Process finished with exit code -1

  • 0

#4 pbezpal

pbezpal

    Активный участник

  • Members
  • PipPip
  • 79 сообщений
  • ФИО:Безпалько Павел

Отправлено 25 июня 2019 - 11:35

Смущает, что UIAVerify не может найти это окно. Может в этом всё дело


  • 0

#5 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 25 июня 2019 - 14:48

Смутно помню, что поиск по классу тоже сбоил. Попробуйте поискать по XPath ".//*[@ClassName='TfrmMain']". По крайней мере, в моем проекте остались локаторы именно такого вида. Если никак, то придется искать другие признаки для поиска.


  • 0

#6 pbezpal

pbezpal

    Активный участник

  • Members
  • PipPip
  • 79 сообщений
  • ФИО:Безпалько Павел

Отправлено 26 июня 2019 - 07:34

Спасибо за подсказку) Не прокатило  :sad:  Буду делать проверку через Sikuli


  • 0

#7 pbezpal

pbezpal

    Активный участник

  • Members
  • PipPip
  • 79 сообщений
  • ФИО:Безпалько Павел

Отправлено 03 июля 2019 - 05:53

Кажется решил проблему

driver.switchTo().activeElement()

Получаю тот самый @ClassName='TfrmMain'


  • 0


Программирование на С# для тестировщиков
онлайн
Автоматизатор мобильных приложений
онлайн
Selenium WebDriver: полное руководство
онлайн
Программирование на Python для тестировщиков
онлайн



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале