2015-08-20 2 views
1

Я пытаюсь написать этот класс Java, который открывает файл в АПК андроид устройства и нажимает несколько кнопок через appium, используя код ниже:java.lang.NoSuchFieldError: исключение INSTANCE выбрасывается varriable водитель appium

package new_appium_test; 

import io.appium.java_client.android.AndroidDriver; 
import io.appium.java_client.remote.MobileCapabilityType; 

import java.io.File; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.concurrent.TimeUnit; 

import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 


public class new_appium_test { 
    public MobileDriver driver; 
    @Before 
    public void setUp() throws MalformedURLException, InterruptedException, Exception { 
    DesiredCapabilities capabilities = new DesiredCapabilities(); 
    capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android"); 
    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "GT-I9300"); //specify your cellphone name 
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION,"4.3"); //specify the platform version 
    capabilities.setCapability("platformName", "Android"); 
    capabilities.setCapability("appium-version", "1.2.4.1"); 
    capabilities.setCapability("appPackage","wizzo.mbc.net"); 
    capabilities.setCapability("appActivity","wizzo.mbc.net.activities.SplashActivity"); 
    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
    } 

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
    } 
    @Test 
    public void chooseEnglish() throws Exception 
    { 
    driver.findElement(By.name("English")).click(); 
    } 
    @After 
    public void tearDown() throws Exception { 
    driver.quit(); 
    } 
} 

хотя эта неудача след появляется:

java.lang.NoSuchFieldError: INSTANCE 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144) 
    at org.openqa.selenium.remote.internal.HttpClientFactory.getClientConnectionManager(HttpClientFactory.java:71) 
    at org.openqa.selenium.remote.internal.HttpClientFactory.<init>(HttpClientFactory.java:57) 
    at org.openqa.selenium.remote.internal.HttpClientFactory.<init>(HttpClientFactory.java:60) 
    at org.openqa.selenium.remote.internal.ApacheHttpClient$Factory.getDefaultHttpClientFactory(ApacheHttpClient.java:251) 
    at org.openqa.selenium.remote.internal.ApacheHttpClient$Factory.<init>(ApacheHttpClient.java:228) 
    at org.openqa.selenium.remote.HttpCommandExecutor.getDefaultClientFactory(HttpCommandExecutor.java:89) 
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:63) 
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:58) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:155) 
    at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:22) 
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:202) 
    at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:50) 
    at new_appium_test.new_appium_test.setUp(new_appium_test.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.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74) 
    at org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50) 
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33) 
    at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) 
    at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) 
    at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71) 
    at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35) 
    at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) 
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) 
    at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

проблема находится в команде водитель = новый AndroidDriver (новый URL ("http://127.0.0.1:4723/wd/hub"), возможности);. Может ли кто-нибудь сказать мне, почему это происходит?

+0

мое предположение, у вас есть несколько версий некоторых из ваших зависимостей на вашем пути к классам (возможно, Apache HTTP Client) – NamshubWriter

+0

вы имеете в виду, что я, вероятно, включили несколько .jar файлы, которые содержат одни и те же классы? – Alex

+0

Да. Иногда вы можете открыть свой проект в своей среде IDE и искать проблемный класс, и он покажет вам, какие банки это в – NamshubWriter

ответ

1

Исключение NoSuchfield генерируется, если приложение пытается получить доступ или изменить указанное поле объекта, и этот объект больше не имеет этого поля. Если эта ошибка возникает при создании экземпляра Android, возможно, некоторые из возможных возможностей могут быть неправильными. Нет такой возможности, как appium-версия - Link. Также имя устройства игнорируется для Android. Попробуйте ниже возможностей

DesiredCapabilities capabilities = new DesiredCapabilities(); 
    capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, 
    "Selendroid"); 
    capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); 
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.3"); 
    capabilities.setCapability(MobileCapabilityType.APP_PACKAGE: "wizzo.mbc.net"); 
    capabilities.setCapability(MobileCapabilityType.APP_ACTIVITY: "wizzo.mbc.net.activities.SplashActivity"); 
Смежные вопросы