2016-06-22 11 views
0

私はAppiumとIntelliJを使用してテストを行うためにテストを実行しようとしているkomootアプリを含むAndroid携帯電話エミュレータを設定しました。私はマックブックの空気から取り組んでいます。 Androidのエミュレータを起動し、Appiumサーバーを起動し、IntelliJで自分のテストを(Javaで)書いたところ、私のテストが実行され、添付された画像に見られるエラーが発生します。私はまた私のテスト "komootTest"を実行した結果の簡単なテストスクリプトとエラーログメッセージをコピーして貼り付けました。IntelliJ(OSX)でAndroidテストを実行しているときにjava.lang.NullPointerExceptionが発生しました

スローされるエラーについて混乱します。 44行目で、komoot(ログインボタン)内の正しいidを持つ変数である変数をインスタンス化しています。この場合、なぜnull例外がスローされますか?私は必要に応じて詳細を提供することができます、ありがとう!ここで

error log image

komootTest.java code image

は私のテストkomootTest.javaのためのコードである:ここで


import io.appium.java_client.AppiumDriver; 
import io.appium.java_client.android.AndroidDriver; 
import org.junit.After; 
import org.junit.Before; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.testng.annotations.Test; 
import java.net.URL; 

public class komootTest 
{ 
    AppiumDriver driver; 

    @Before 
    public void setUp() throws Exception 
    { 
     //set desired capabilities and specify device name 
     DesiredCapabilities capabilities = new DesiredCapabilities(); 
     capabilities.setCapability("deviceName", "BigBrother Emulator"); 

     //capabilities.setCapability("appPackage", "de.komoot.android"); 
     //capabilities.setCapability("appActivity", "com.google.android.gms.auth.api.signin.internal.SignInHubActivity"); 

     //establish a connection with the server 
     driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
    } 

    @After 
    public void end() throws Exception 
    { 
     //kill connection with server after test has been executed 
     driver.quit(); 
    } 

    @Test 
    public void logInHereButton() 
    { 
     //reference UI element by ID and click it 
     WebElement logInHere = driver.findElement(By.id("de.komoot.android:id/textview_login")); 
     logInHere.click(); 
    } 
} 

私はkomootTest.javaを実行するとエラーメッセージです:


[TestNG] Running: 
    /Users/coracoleman/Library/Caches/IdeaIC2016.1/temp-testng-customsuite.xml 

java.lang.NullPointerException 
    at komootTest.logInHereButton(komootTest.java:44) 
    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:497) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 
    at org.testng.TestRunner.privateRun(TestRunner.java:774) 
    at org.testng.TestRunner.run(TestRunner.java:624) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:261) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140) 
    at org.testng.TestNG.run(TestNG.java:1048) 
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74) 
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121) 
    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:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 


=============================================== 
Default Suite 
Total tests run: 1, Failures: 1, Skips: 0 
=============================================== 


Process finished with exit code 0 

+0

画像の代わりに、質問にコードを入力する必要があります。 –

+0

私はそれを変更しました。コードが質問内にあります –

+0

すべてのライブラリ/ドライバが正しくインストールされていますか? –

答えて

0

問題は解決します!私はIntelliJで新しいプロジェクトを開始し、代わりにMavenとJavaを選択してプロジェクトを書き直しました。私は、次にpom.xmlファイルに依存関係をインポートしました。私は自分の能力を完全には指定していませんでしたが、pom.xmlファイルに自分の依存関係を含めていませんでした。プロジェクト構造/プロジェクト設定/ライブラリにjava-client-4.0.0.jarとseleniumスタンドアロンサーバーの.jarファイルを必ず含めてください。ここで

は私のpom.xmlファイルの内容は以下のとおりです。ここで

<?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>com.example</groupId> 
    <artifactId>AppiumTest2</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.seleniumhq.selenium</groupId> 
      <artifactId>selenium-java</artifactId> 
      <version>2.53.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>6.1.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>io.appium</groupId> 
      <artifactId>java-client</artifactId> 
      <version>4.0.0</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

</project> 

は、私が正常に実行することができた簡単なコードである:ここでは

package scenarios; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.testng.annotations.Test; 
import java.net.URL; 
import java.util.concurrent.TimeUnit; 


public class AndroidSetup 
{ 
    WebDriver driver; 

    @Test 
    public void setUp() throws Exception 
    { 
     //create object of DesiredCapabilities class 
     DesiredCapabilities capabilities = new DesiredCapabilities(); 

     //set android deviceName desired capability 
     capabilities.setCapability("deviceName", "BigBrother Emulator"); 

     //set browserName desired capability 
     capabilities.setCapability("browserName", "Android"); 

     //set android platformVersion desired capability 
     capabilities.setCapability("platformVersion", "5.1"); 

     //set android platformName desired capability 
     capabilities.setCapability("platformName", "Android"); 

     //set android appPackage desired capability 
     capabilities.setCapability("appPackage", "de.komoot.android"); 

     //set android appActivity desired capability 
     capabilities.setCapability("appActivity", "de.komoot.android.app.InspirationActivity"); 

     //set appium server address and port number in URL string 
     //this will launch app in emulator 
     driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
     driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 

     //click on LogIn button 
     driver.findElement(By.id("de.komoot.android:id/textview_login")).click(); 
     driver.quit(); 
    } 
} 

は、得られた実行ログです:

[TestNG] Running: 
    /Users/coracoleman/Library/Caches/IdeaIC2016.1/temp-testng-customsuite.xml 

=============================================== 
Default Suite 
Total tests run: 1, Failures: 0, Skips: 0 
=============================================== 


Process finished with exit code 0 
+0

さらに、Appiumサーバーがテスト実行の間に新しく実行されていることを確認しなければなりませんでした。テストを実行する前に、サーバが稼働していないことを確認して(ターミナルから「adb kill-server」を入力して)、新たにAppiumを起動して、毎回新しいサーバセッションを開始しました。 –