Webelement.click() giving java.lang.NullPointerException in appium

半城伤御伤魂 提交于 2019-12-13 03:13:17

问题


I am getting NullPointerException everytime I try to run below code at code line element.click()

Note : It passes if I comment the last line of code. Also similar question was asked here but it didn't help.

AndroidDriver driver;
@Test
public void TestAppium() throws Exception{

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("deviceName", "MotoG5s Plus");
    capabilities.setCapability("platformVersion", "7.1.1");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("noReset", "true");

    File file = new File("D:\\Appium Workspace\\AppiumDemo\\apk\\MakeMyTrip Flights Hotels Cabs IRCTC Rail Bookings_v7.3.2_apkpure.com.apk");

    capabilities.setCapability("app", file.getAbsolutePath());

    driver = new AndroidDriver(new URL("http://10.80.196.55:4723/wd/hub"), capabilities);
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    Thread.sleep(10000);
    WebElement element = driver.findElementById("com.makemytrip:id/my_profile_icon");
    element.click();

}

Also my driver onject is not null as you can see from below screenshot

Also the element is not null as you can see in screenshot below :-

I have even put the thread.sleep() in case it is because of loading. The ID given in findelementbyid() method is correct. And also it launches the app and then it

It Launches the app and then it throws below error message :-

java.lang.NullPointerException
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83)
at Appiumcapabilities.TestAppium(Appiumcapabilities.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:580)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)

I am using selenium-java-3.9.1 and appium server 1.7.1, testNG Windows 10, appium-java-client version 4.1.0


回答1:


Do not set selenium dependency explicitly as appium-java-client dependency already has it in-built: you are running into library incompatibility issue.

If it is necessary to change the version of Selenium then you can configure pom.xml like following:

<dependency>
  <groupId>io.appium</groupId>
  <artifactId>java-client</artifactId>
  <version>${version.you.require}</version>
  <scope>test</test>
  <exclusions>
    <exclusion>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>${selenium.version.you.require}</version>
</dependency>

Same thing can be done with Gradle:

repositories {
    jcenter()
    maven {
        url "http://repo.maven.apache.org/maven2"
    }
}

dependencies {
   ...
   testCompile group: 'io.appium', name: 'java-client', version: requiredVersion {
       exclude module: 'selenium-java'
   }
   
   testCompile group: 'org.seleniumhq.selenium', name: 'selenium-java', 
   version: requiredSeleniumVersion
   ...
}   



回答2:


As per your code block it seems you are using Java as the Selenium Language Binding Art. Now, as per the Java Docs the supported methods of a WebElement are:

  • findElement(By by)
  • findElements(By by)

Where as findElementById() is associated with the JavaScript Selenium Language Binding Art.

Solution

If you desire to work with the id attribute of an element, you need to replace the line:

WebElement element = driver.findElementById("com.makemytrip:id/my_profile_icon");

By:

WebElement element = driver.findElement(By.id("com.makemytrip:id/my_profile_icon"));



回答3:


Maybe issue to this problem is that it can't find Your package or activity, try putting these desired capsabilities:

appActivity = Activity name for the Android activity you want to wait for (eg. "MainActivity, .Settings")

appPackag = Java package of the Android app you want to run (eg. "com.example.android.myApp, com.android.settings")

appWaitActivity = Activity name for the Android activity you want to wait for (eg. Splash)

It might be that You did everything OK, but wrong activity is shown.

Good practice is to put appPackage, and appActivity.

Hope this helps,

P.S.: and please also implement solution/answer from @dmle, it also could cause this kind of issues.



来源:https://stackoverflow.com/questions/51379757/webelement-click-giving-java-lang-nullpointerexception-in-appium

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!