Webelement.click()在appium中给出java.lang.NullPointerException

时间:2018-07-17 11:01:17

标签: java selenium selenium-webdriver webdriver appium

每次尝试在代码行element.click()下运行以下代码时,我都会得到NullPointerException

注意:如果我注释了最后一行代码,则通过。 还提出了类似的问题here,但没有帮助。

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();

}

我的驱动程序onject也不为空,如下面的屏幕截图所示

enter image description here

该元素也不为null,如下面的屏幕快照所示:-

enter image description here

我什至放了thread.sleep()以防万一是由于加载。 findelementbyid()方法中提供的ID是正确的。并启动应用程序,然后

它启动应用程序,然后引发以下错误消息:-

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)

我正在使用selenium-java-3.9.1和appium服务器1.7.1,testNG Windows 10,appium-java-client版本4.1.0

3 个答案:

答案 0 :(得分:1)

请勿显式设置硒依赖项,因为appium-java-client依赖项已内置在其中:您遇到了库不兼容问题

如果有必要更改Selenium的版本,则可以如下配置pom.xml:

<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>

可以使用 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
   ...
}   

答案 1 :(得分:0)

根据您的代码块,您似乎正在将 Java 用作 Selenium Language Binding Art 。现在,根据Java Docs WebElement 支持的方法是:

findElementById() JavaScript Selenium Language Binding Art 相关联。

解决方案

如果您希望使用元素的id属性,则需要替换以下行:

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

通过:

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

答案 2 :(得分:0)

此问题的可能是它找不到您的包裹或活动,请尝试放置以下所需功能:

appActivity =您要等待的Android活动的活动名称 (例如“ MainActivity,.Settings”)

appPackag =您要运行的Android应用的Java程序包 (例如“ com.example.android.myApp,com.android.settings”)

appWaitActivity =您要等待的Android活动的活动名称 (例如飞溅)

可能您所做的一切都很好,但是显示了错误的活动。

优良作法是放置appPackage和appActivity。

希望这会有所帮助,

P.S .:并且还请实施@dmle的解决方案/答案,这也可能导致此类问题。