appium 中的 NoSuchMethodError [英] NoSuchMethodError in appium

查看:27
本文介绍了appium 中的 NoSuchMethodError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在设置我的第一个 appium 项目后遇到了 java.lang.NoSuchMethodError代码很简单,在这一行失败了:

i got java.lang.NoSuchMethodError after setting up my first appium project the code is simple, it fails at this line:

  driver = new AppiumDriver(new URL("http://x.x.x.x:4723/wd/hub"), capabilities);   

跟踪是:

java.lang.NoSuchMethodError: com.google.common.base.Joiner$MapJoiner.appendTo(Ljava/lang/StringBuilder;Ljava/lang/Iterable;)Ljava/lang/StringBuilder;
    at com.google.common.net.MediaType.toString(MediaType.java:674)
    at org.openqa.selenium.remote.http.JsonHttpCommandCodec.encode(JsonHttpCommandCodec.java:197)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:152)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572)

我的 pom.xml 是:

my pom.xml is:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>LATEST</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>1.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
        <scope>test</scope>
    </dependency>
    <!-- Includes the Sauce JUnit helper libraries 
    <dependency>
        <groupId>com.saucelabs</groupId>
        <artifactId>sauce_junit</artifactId>
        <version>1.0.18</version>
        <scope>test</scope>
    </dependency>-->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>
</dependencies>

我用谷歌搜索了一下,有人说我用的是旧的 guava.jar,但我反编译了 guava-15.0.jar 并发现 Joiner.appendTo(StringBuilder, Iterable) 存在,为什么它总是显示这个错误?

i've google it, and some say that i use an older guava.jar, but i decomplie guava-15.0.jar and find the Joiner.appendTo(StringBuilder, Iterable) exist, why it always showing this error?

@Before
  public void setUp() throws Exception {
    // set up appium
    final File classpathRoot = new File(System.getProperty("user.dir"));
    final File appDir = new File(classpathRoot, "../../../apps/ContactManager");
    final File app = new File(appDir, "ContactManager.apk");
    final DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("deviceName", "Android Emulator");
    capabilities.setCapability("platformVersion", "4.4");
    capabilities.setCapability("app", app.getAbsolutePath());
    capabilities.setCapability("appPackage",
        "com.example.android.contactmanager");
    capabilities.setCapability("appActivity", ".ContactManager");
    driver = new AndroidDriver(new URL("http://x.x.x.x:4723/wd/hub"),
        capabilities);
  }

也在运行命令mvn -U clean test"后,我可以看到这个错误

also after running command "mvn -U clean test", i can see this error

Tests in error:        
addContact(com.saucelabs.appium.AndroidContactsTest):com.google.common.base.Joiner$MapJoiner.appendTo(Ljava/lang/StringBuilder;Ljava/lang/Iterable;)Ljava/lang/StringBuilder;
addContact(com.saucelabs.appium.AndroidContactsTest)
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0

只有一个测试用例的名字是addContact,为什么一直显示Test run: 2?通过调试,我发现在运行这句话driver.quit()"时出现了,去掉这个方法后,显示Test run: 1

There's only one test case whose name is addContact, why it keep showing Test run: 2? through debugging, i found it happens when running this sentence "driver.quit()", after removeing this method, it shows Test run: 1

依赖树如下,除了guava-17.0,我没有看到任何关于MapJoiner的东西,实际上我可以在这个jar文件中找到MapJoiner.appendTo(Stringbuilder, iterate<>)

The dependency tree is list below, i don't see anything about MapJoiner except guava-17.0, actually i can find MapJoiner.appendTo(Stringbuilder, iterate<>) in this jar file

[INFO] com.lvntest.appium:sauce_appium_junit:jar:0.0.1-SNAPSHOT
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.seleniumhq.selenium:selenium-java:jar:2.43.1:test
[INFO] |  +- org.seleniumhq.selenium:selenium-chrome-driver:jar:2.43.1:test
[INFO] |  |  \- org.seleniumhq.selenium:selenium-remote-driver:jar:2.43.1:test
[INFO] |  |     +- cglib:cglib-nodep:jar:2.1_3:test
[INFO] |  |     \- org.seleniumhq.selenium:selenium-api:jar:2.43.1:test
[INFO] |  +- org.seleniumhq.selenium:selenium-htmlunit-driver:jar:2.43.1:test
[INFO] |  |  \- net.sourceforge.htmlunit:htmlunit:jar:2.15:test
[INFO] |  |     +- xalan:xalan:jar:2.7.1:test
[INFO] |  |     |  \- xalan:serializer:jar:2.7.1:test
[INFO] |  |     +- commons-collections:commons-collections:jar:3.2.1:test
[INFO] |  |     +- org.apache.commons:commons-lang3:jar:3.3.2:test
[INFO] |  |     +- org.apache.httpcomponents:httpmime:jar:4.3.3:test
[INFO] |  |     +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.15:test
[INFO] |  |     +- xerces:xercesImpl:jar:2.11.0:test
[INFO] |  |     |  \- xml-apis:xml-apis:jar:1.4.01:test
[INFO] |  |     +- net.sourceforge.nekohtml:nekohtml:jar:1.9.21:test
[INFO] |  |     +- net.sourceforge.cssparser:cssparser:jar:0.9.14:test
[INFO] |  |     |  \- org.w3c.css:sac:jar:1.3:test
[INFO] |  |     \- org.eclipse.jetty:jetty-websocket:jar:8.1.15.v20140411:test
[INFO] |  |        +- org.eclipse.jetty:jetty-util:jar:8.1.15.v20140411:test
[INFO] |  |        +- org.eclipse.jetty:jetty-io:jar:8.1.15.v20140411:test
[INFO] |  |        \- org.eclipse.jetty:jetty-http:jar:8.1.15.v20140411:test
[INFO] |  +- org.seleniumhq.selenium:selenium-firefox-driver:jar:2.43.1:test
[INFO] |  |  +- commons-io:commons-io:jar:2.4:test
[INFO] |  |  \- org.apache.commons:commons-exec:jar:1.1:test
[INFO] |  +- org.seleniumhq.selenium:selenium-ie-driver:jar:2.43.1:test
[INFO] |  |  +- net.java.dev.jna:jna:jar:3.4.0:test
[INFO] |  |  \- net.java.dev.jna:platform:jar:3.4.0:test
[INFO] |  +- org.seleniumhq.selenium:selenium-safari-driver:jar:2.43.1:test
[INFO] |  +- org.seleniumhq.selenium:selenium-support:jar:2.43.1:test
[INFO] |  \- org.webbitserver:webbit:jar:0.4.15:test
[INFO] |     \- io.netty:netty:jar:3.5.5.Final:test
[INFO] +- io.appium:java-client:jar:2.0.0:compile
[INFO] |  +- org.apache.httpcomponents:httpclient:jar:4.3.3:compile
[INFO] |  |  +- org.apache.httpcomponents:httpcore:jar:4.3.2:compile
[INFO] |  |  +- commons-logging:commons-logging:jar:1.1.3:compile
[INFO] |  |  \- commons-codec:commons-codec:jar:1.6:compile
[INFO] |  +- com.google.guava:guava:jar:17.0:compile
[INFO] |  +- cglib:cglib:jar:3.1:compile
[INFO] |  |  \- org.ow2.asm:asm:jar:4.2:compile
[INFO] |  \- org.reflections:reflections:jar:0.9.8:compile
[INFO] |     +- javassist:javassist:jar:3.12.1.GA:compile
[INFO] |     \- dom4j:dom4j:jar:1.6.1:compile
[INFO] +- com.googlecode.json-simple:json-simple:jar:1.1.1:test
[INFO] +- commons-lang:commons-lang:jar:2.6:test
[INFO] +- com.saucelabs:sauce_junit:jar:2.1.10:compile
[INFO] |  +- com.saucelabs:sauce_java_common:jar:2.1.10:compile
[INFO] |  \- com.saucelabs:saucerest:jar:1.0.22:compile
[INFO] |     \- org.json:json:jar:20090211:compile
[INFO] \- com.google.code.gson:gson:jar:2.3:compile

推荐答案

你使用的是哪个版本的 selenium?

Which version of selenium are you using ?

以下列方式之一编辑您的 pom.xml..

Edit your pom.xml in one of the following ways..

    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>2.0.0</version>
    </dependency>

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>LATEST</version>
    </dependency>

对于上述依赖项,使用 AndroidDriver() 代替 AppiumDriver() 或将以下与 AppiumDriver() 一起使用

For the above dependency use AndroidDriver() in place of AppiumDriver() or use the following with AppiumDriver()

    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>1.5.0</version>
    </dependency>

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.42.2</version>
    </dependency>

干杯

这篇关于appium 中的 NoSuchMethodError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆