Драйвер Appium не может найти никаких элементов в пользовательском интерфейсе приложения. Попытка найти элемент по идентификатору, xpath, name. Кажется, ничего не работает - PullRequest
0 голосов
/ 27 апреля 2018

Это мой тестовый код Eclipse


package com.example;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.SessionId;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileBy;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;

public class FirstAppiumTest {
    //protected AndroidDriver<AndroidElement> driver = null;
    public AppiumDriver driver;
    @BeforeTest
    public void Setup() throws MalformedURLException
    {String url = "http://127.0.0.1:4723/wd/hub";

        DesiredCapabilities cap=new DesiredCapabilities();

    cap.setCapability("noReset","true");
    cap.setCapability("deviceName","Redmi 4");
    cap.setCapability("platformVersion","7.1.2");
    cap.setCapability("platformName","Android");
    cap.setCapability("app","C:\\Appium\\selendroid-test-app.apk");



     driver=new AndroidDriver(new URL(url),cap);
    }
    @Test
    public void Simpletest() throws InterruptedException
    {  
        driver.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS);
        //driver.findElement(By.className("android.widget.Button")).click();
        WebElement e1=driver.findElement(By.id("showToastButton"));
        e1.click();
         System.out.print(e1);
 String text=driver.findElement(By.className("android.widget.EditText")).getText();
     System.out.print(text);
     String src = driver.getPageSource();
       System.out.println(src);         
      driver.quit();


    }
}

Здесь, когда я пытаюсь напечатать e1, он показывает мне значение объекта. Но когда я пытаюсь щелкнуть или getText, он показывает исключение. Также работает driver.quit и driver.getPageSource (). Лог в консоли выглядит следующим образом


[RemoteTestNG] обнаружен TestNG версии 6.14.2 27 апреля 2018 11:16:16 org.openqa.selenium.remote.ProtocolHandshake createSession ИНФОРМАЦИЯ: Обнаруженный диалект: OSS Не удалось: самый простой java.lang.NullPointerException в org.openqa.selenium.remote.RemoteWebElement.execute (RemoteWebElement.java:279) в org.openqa.selenium.remote.RemoteWebElement.click (RemoteWebElement.java:83) в com.example.FirstAppiumTest.Simpletest (FirstAppiumTest.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) в java.lang.reflect.Method.invoke (Неизвестный источник) в org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:124) в org.testng.internal.Invoker.invokeMethod (Invoker.java:580) в org.testng.internal.Invoker.invokeTestMethod (Invoker.java:716) в org.testng.internal.Invoker.invokeTestMethods (Invoker.java:988) в org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:125) в org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) в org.testng.TestRunner.privateRun (TestRunner.java:648) в org.testng.TestRunner.run (TestRunner.java:505) в org.testng.SuiteRunner.runTest (SuiteRunner.java:455) на org.testng.SuiteRunner.runSequentially (SuiteRunner.java:450) в org.testng.SuiteRunner.privateRun (SuiteRunner.java:415) в org.testng.SuiteRunner.run (SuiteRunner.java:364) на org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) на org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:84) на org.testng.TestNG.runSuitesSequentially (TestNG.java:1208) в org.testng.TestNG.runSuitesLocally (TestNG.java:1137) на org.testng.TestNG.runSuites (TestNG.java:1049) на org.testng.TestNG.run (TestNG.java:1017) на org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:114) в org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:251) atg.testng.remote.RemoteTestNG.main (RemoteTestNG.java:77)

===============================================

Тест по умолчанию Выполнено тестов: 1, сбоев: 1, пропусков: 0

Набор по умолчанию Всего тестов выполнено: 1, сбоев: 1, пропусков: 0

1 Ответ

0 голосов
/ 02 мая 2018

Сначала измените @BeforeTest на @BeforeMethod, так как вы сами запускаете тестовый класс и не запускаете xml runner. обратите внимание на различия между типами аннотаций.

Создан ли драйвер и был ли открыт доступ к приложению в устройстве? если это так, попробуйте использовать элемент Android вместо webelement. Если вышеприведенное не сработало и драйвер не является нулевым, попробуйте щелкнуть элемент с помощью селектора Android Automator UI.

...