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

2024-02-19

我正在尝试使用 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'
}

error:

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 http://appium.io文档齐全且用途广泛,Android Studio 的工作组合花了我一天的时间。就我而言,它是浓缩咖啡的替代品,因为它目前不支持免安装应用的多功能测试 https://stackoverflow.com/q/49609987/1112963。此外,Appium 还提供了更广泛的可能性来测试应用程序集成,例如 Firebase 消息传递、使用其他应用程序等。

  1. 安装Appium服务器 as UI https://github.com/appium/appium-desktop/releases.
  2. Setup Appium Server for your localhost:
    • 主机:127.0.0.1 端口:4723
    • 编辑配置 -> 设置 ANDROID_HOME 和 JAVA_HOME 路径。
    • Start server. You'll see a console, leave this window open. Start Appium Server
  3. 运行安卓模拟器来自 Android Studio。
  4. Start Appium Session for your Emulator in Appium UI (File -> New Session Window): Start Appium Session
  5. If everything goes fine and console shows no log errors, then Appium Inspector window will open. Also your app will be run in the Emulator. In Inspector find elements by clicking on a screenshot. Record your actins with buttons atop and get autogenerated code: enter image description here
  6. 添加库到你的项目app or my_featuregradle 文件。 Appium 和 Selenium 版本应该注意避免“没有这样的方法错误” -查看答案 https://stackoverflow.com/a/51960660/1112963:

    dependencies {
      androidTestImplementation 'junit:junit:4.12'
      androidTestImplementation 'io.appium:java-client:5.0.1'
      androidTestImplementation 'org.seleniumhq.selenium:selenium-java:3.4.0'
    }
    
  7. 创建 JUnit 功能测试类在你的Android项目中.../src/androidTest/java/文件夹。您也可以使用简单的 JUnit 测试包装器。为了满足测试需求,您可以创建一个单独的 Java 项目或 Java 类main方法在您的 Android 项目中,但将 Appium 测试集成到 Android Studio 测试功能中会更方便。还要检查您是否导入其他测试库,并且不要在代码中混合使用它(例如,@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<MobileElement> 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 and @After在班级中的每个测试用例之前和之后使用(@BeforeClass and @AfterClass需要静态且不易处理)。因此,它每次都会重新启动应用程序,并且不方便进行链接测试。所以最好将一种方法注释为@Test,它将调用其他未注释的方法来设置、按要求的顺序执行测试用例并完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用Appium + Android Studio 3.0 + Java 8 的相关文章

  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 虽然我的类已加载,但 Class.forName 抛出 ClassNotFoundException

    代码如下 它的作用是加载我放在主目录中的 jar 文件中的所有类 import java io File import java util jar JarFile import java util jar JarEntry import j
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • 如何更改操作栏背景和文本颜色

    我正在使用本教程中的导航抽屉 http www androidhive info 2013 11 android sliding menu using navigation drawer http www androidhive info
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • Android MulticastSocket.joinGroup 不会触发发送 IGMP 消息

    Code MulticastSocket s new MulticastSocket InetAddress addr InetAddress getByName 230 230 230 1 s joinGroup addr 在 Ubunt
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • 何时调用 Thread.currentThread().interrupt() 何时不调用?

    从互联网上的多篇文章来看 建议不要吞咽InterruptedException 当我要重用同一个线程时 使用类似这样的线程池执行器来执行此操作更有意义 public static void main String args throws I
  • SQL LIKE % 对于整数

    在 T SQL 中 如何编写查询来为列的任何整数值选择行 比如数据是这样的 NAME AGE A 10 B 20 C 10 D 20 并且有一个
  • 根据控件宽度缩放 UISegmentedControl 标签

    这似乎是理所当然的 但我找不到任何方法来做到这一点 基本上我拥有的是UISegmentedControl带有两个本地化标签NSLocalizedString 我已经设置了字体大小 并且所有内容在英语和其他几种语言中看起来都很棒 但是 在日语
  • 位置:Flash 上的绝对 div

    是否有可能position absolute a div div 在 Flash 横幅上 无需添加wmode transparent 到横幅 我有一个灯箱需要显示在我的广告上方 但我无法直接修改横幅 因为它们来自第三方 Edit 问题主要出
  • 如何从 std::list 实现 O(1) 擦除

    问题是推荐的使用方式是什么std list实现 O 1 删除列表项 通常 当我选择双向链表时 我希望能够在 O 1 时间内从列表中删除一个元素 然后在 O 1 时间内将其移动到不同的列表 如果该元素有自己的prev and next指针 没
  • 是否有低级网络库来嗅探和更改网络流量? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种嗅探网络数据包并用 C 对其进行编码的方法 总之 改变网络流量 我不知道如何解释我的请求
  • android viewpager with tablayout - 如何在选项卡内添加其他片段?

    so i have the classic viewpager in a tablayout that looks something like this 我的 viewPagerAdapter 类如下所示 公共类 HomePagerAda
  • 在 onreadystatechange 函数中访问类变量时出现 Ajax 类错误

    我目前正在编写 JavaScript Ajax 类并遇到错误 在函数 processRawData 中 我似乎无法使用 this xhr 访问类变量 xhr 我得到 无法读取未定义的readyState属性 我目前已经通过在设置对onrea
  • 为什么水平边距不像垂直边距那样折叠?

    我明白为什么边距塌陷发生 我在不同的网站上看到了一些关于它是如何发生以及为什么会发生的例子 再具体一点 margin on CSS 技巧 https css tricks com almanac properties m margin 是我
  • Singleton 不在 Cython 中工作

    这就是我定义单例的方式 class Singleton type instances def call cls args kwargs if cls not in cls instances cls instances cls super
  • 如何翻译身份密码验证消息

    到目前为止 我已经能够翻译 ASP Net Core 2 1 Web 应用程序中的所有内容 事实证明 这是一个小小的挑战 因为搭建的帐户页面需要一些设置 但我找不到翻译密码验证消息的方法 另外 翻译模型绑定消息是一个小挑战 感谢 stack
  • 标准机器学习语法

    我是标准机器学习的新手 并尝试编写以下代码 fun whilestat test stmt1 fn x gt if test x then stmt1 x whilestat test stmt1 else x 问题是它给了我以下错误 w
  • 动态翻译/使用 i18next 进行变量翻译

    为什么我不能动态翻译 在 i18next 中使用变量 例如在我的 JS 文件中我得到了这个 这里我使用一个变量并将其分配给 i18n 函数 但它不起作用 this does not work var dynamicTranslation m
  • 允许用户在 WPF 中调整 Expander 的大小

    我有丰富的 C 和 WinForms 经验 但我是 WPF 的新手 我有一个带有向下扩展的扩展器的窗口 就像我当前输入的问题框一样 我希望用户能够通过单击底部的字形 如这个问题框 并将扩展器拖动到所需的大小来动态调整扩展器的大小 谁能提供
  • 在 Flask 中执行耗时函数时显示“正在加载”消息

    我对 Flask 还比较陌生 总体来说还是一个网络菜鸟 但到目前为止我已经取得了一些不错的结果 现在我有一个表单 用户可以在其中输入查询 该查询被提供给一个函数 该函数可能需要 5 到 30 秒的时间才能返回结果 使用 Freebase A
  • Angular 2动态更改ngTemplateOutlet中的模板

    我想动态更改 ngTemplateOutlet 中的模板 当 selectedTab 更改时 ngTemplateOutlet 也会更改 我下面有两个基本模板 称为 Tab1 和 Tab2 Note 我使用的是 Angular 版本 4 选
  • 具有类型成员的 Case 对象的模式匹配

    Scala 有一个很好的功能来推断模式匹配中的类型参数 它还检查模式匹配的详尽性 例如 sealed trait PField T case object PField1 extends PField String case object
  • Jira:从没有主题的电子邮件创建问题和评论

    我正在寻找一种方法来控制 从电子邮件创建问题和评论 的工作方式 目前 由于我们使用内置系统 任何收到的没有主题的电子邮件都会导致服务失败 并显示消息 问题必须有摘要 邮件消息的主题为空或没有主题 每次发生这种情况时 我们都必须手动处理电子邮
  • pow() 适用于 C 中的 int 数据类型吗? [复制]

    这个问题在这里已经有答案了 我只是编写一个程序来计算整数的幂 但产出并没有达到预期 它适用于除5 的幂 我的代码是 include
  • 无法使用Appium + Android Studio 3.0 + Java 8

    我正在尝试使用 appium java 客户端进行 Android UI 测试 但是 我无法让它运行 这是我的 build gradle 和错误消息 apply plugin com android application android