无法使用Appium + Android Studio 3.0 + Java 8

我正在尝试使用appium java客户端进行Android UI测试。 但是,我不能让它运行。 这是我的build.gradle和我的错误消息。

apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { applicationId "com.example.wpjtest2" minSdkVersion 26 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3' androidTestImplementation 'io.appium:java-client:5.0.4' } 

错误:

 Information:Gradle tasks [:app:assembleDebug, :app:assembleDebugAndroidTest] Error:java.lang.IllegalAccessException: no such method: org.springframework.core.io.buffer.DataBufferUtils.lambda$read$0(ReadableByteChannel)ReadableByteChannel/invokeStatic Error:java.lang.NoClassDefFoundError: org/reactivestreams/Publisher Error:java.lang.ClassNotFoundException: Class org.reactivestreams.Publisher not found Error:java.nio.file.DirectoryNotEmptyException: C:\Users\zil\AppData\Local\Temp\lambdas5516872364251960030\org\springframework\core\io Error:java.lang.IllegalAccessException: no such method: org.springframework.beans.factory.config.YamlMapFactoryBean.lambda$createMap$0(Map,Properties,Map)void/invokeSpecial Error:java.lang.NoClassDefFoundError: org/yaml/snakeyaml/reader/UnicodeReader Error:java.lang.ClassNotFoundException: Class org.yaml.snakeyaml.reader.UnicodeReader not found Error:Execution failed for task ':app:transformClassesWithDesugarForDebugAndroidTest'. > com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments {@C:\Users\xxx\project\WPJTest2\app\build\intermediates\tmp\desugar_args221997254795871866} Information:BUILD FAILED in 15s Error:java.lang.ClassNotFoundException: Class javax.validation.Validator not found Information:9 errors Information:0 warnings Information:See complete output in console 

谁能检查我,看看我是否有正确和充分的依赖? 有很多关于添加Appium的教程,但它们都不适用于我。

另一方面,如果我可以使用Java 7与Appium集成,我应该怎么做呢?

虽然Appium有很好的文档记录和多function性,但Android Studio的工作组合花了我一个工作日。 就我而言,它取代了Espresso,因为它目前不支持Instant Apps的多function测试 。 此外,Appium还提供了更广泛的测试应用程序集成的可能性,例如Firebase消息传递,使用其他应用程序等。

  1. 将Appium Server安装为UI 。
  2. 为您的localhost 设置Appium Server
    • 主持人:127.0.0.1端口:4723
    • 编辑配置 – >设置ANDROID_HOME和JAVA_HOME路径。
    • 启动服务器。 你会看到一个控制台,打开这个窗口。 启动Appium Server
  3. 从Android Studio 运行Android模拟器
  4. 在Appium UI(文件 – >新会话窗口)中为您的仿真器启动Appium会话启动Appium会话
  5. 如果一切正常并且控制台没有显示日志错误,那么将打开Appium Inspector窗口 。 您的应用程序也将在模拟器中运行 。 在Inspector中,通过单击屏幕截图查找元素。 使用按钮顶部录制您的actins并获取自动生成的代码: 在此处输入图像描述
  6. 将库添加到项目appmy_feature gradle文件中。 Appium和Selenium版本应该注意避免“没有这样的方法错误” – 请参阅答案 :

     dependencies { androidTestImplementation 'junit:junit:4.12' androidTestImplementation 'io.appium:java-client:5.0.1' androidTestImplementation 'org.seleniumhq.selenium:selenium-java:3.4.0' } 
  7. 在Android项目中创建一个JUnitfunction测试类 .../src/androidTest/java/ folder。 您也可以使用简单的JUnit测试包装器。 对于测试需求,您可以在Android项目中使用main方法创建单独的Java项目或Java类,但将Appium测试集成到Android Studio测试function中会更方便。 还要检查您是否不导入其他测试库,也不要将其用作代码中的混合(例如@Test可用于TestNG以及JUnit)。 在方法中使用来自Appium Inspector的自动生成代码,例如:

      package com.example.my_project; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.MalformedURLException; import java.net.URL; import io.appium.java_client.MobileElement; import io.appium.java_client.android.AndroidDriver; public class SampleTest { private AndroidDriver driver; @Test public void testPlan() throws MalformedURLException { setUp(); testWorkUnit_WithCertainState_ShouldDoSomething(); abotherTestWorkUnit_WithCertainState_ShouldDoSomething(); tearDown(); } public void setUp() throws MalformedURLException { DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); URL remoteUrl = new URL("http://localhost:4723/wd/hub"); desiredCapabilities.setCapability( "platformName", "Android"); desiredCapabilities.setCapability( "deviceName", "Android Emulator"); desiredCapabilities.setCapability( "appPackage", "com.example.my_project"); desiredCapabilities.setCapability( "appActivity", "com.example.my_project.MyActivity"); driver = new AndroidDriver<>( remoteUrl, desiredCapabilities); } public void testWorkUnit_WithCertainState_ShouldDoSomething() { MobileElement el1 = driver.findElementById( "com.example.my_project:id/urlField"); el1.sendKeys("example.com"); } public void tearDown() { driver.quit(); } } 

对于代码中的注释: @Before@After在类中的每个测试用例之前和之后使用( @BeforeClass@AfterClass需要静态且不是handlful)。 因此,它每次都会重新启动应用程序,并且不方便链接测试。 因此,最好使用@Test注释一个方法,它将调用其他未注释的方法进行设置,按所需顺序执行测试用例并完成。