2016-06-22 4 views
0

Я настроил эмулятор телефона Android, который содержит приложение komoot, которое я пытаюсь выполнить при использовании Appium и IntelliJ, чтобы написать тест. Я работаю над потоком macbook. После того, как я запустил свой эмулятор Android, запустил сервер Appium и написал свой тест (в java) в IntelliJ, я запустил свой тест и выдает ошибку, увиденную на прилагаемых изображениях. Я также скопировал/наклеил мой простой тестовый скрипт и сообщения журнала ошибок, которые были результатом запуска моего теста «komootTest».java.lang.NullPointerException при запуске теста на Android в IntelliJ (OSX)

Я смущен насчет ошибки, которую бросают. По строке 44 я создаю экземпляр переменной, которая является элементом в komoot (кнопка входа) с правильным идентификатором. Зачем в этом случае было бы выбросить нулевое исключение? Я могу предоставить более подробную информацию по мере необходимости, спасибо!

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 заново. –

Смежные вопросы