自动化测试用例适用于 appium 命令行工具,但不适用于桌面客户端

     2023-03-22     220

关键词:

【中文标题】自动化测试用例适用于 appium 命令行工具,但不适用于桌面客户端【英文标题】:Automation test case is working for appium command line tool but not for desktop client 【发布时间】:2019-12-20 22:49:00 【问题描述】:

请帮助我!!!。 我正在尝试自动化一个android应用程序。我正在使用 JAVA。 如果我从命令行启动 appium 服务器并运行测试用例,它工作正常。 但是,当我使用 Appium 桌面客户端(版本 - 1.13.0)启动 appium 服务器时,出现错误。 为什么使用 Appium 桌面客户端(版本 - 1.13.0)时测试用例总是失败,而使用 appium 命令行工具运行相同的代码时可以正常运行?

我将 Appium(1.14.0)Appium Desktop version(1.13.0) 与 Java 8 以及以下 jar 文件一起使用

Selenium 远程驱动程序-3.14.0 Java-client-7.0.0

Apache 通用语言文件 - 3.7

public static AndroidDriver<AndroidElement> InstallInvokeAPK() throws MalformedURLException

//Define the source folder
File f1 = new File("src");

//Define the destination and name of the APK file
File f2 = new File(f1, "New Driver app-excel-debug.apk");

    //COnfiguration setting to work with the application
DesiredCapabilities cap = new DesiredCapabilities();//Creating an object of Desiredcapabilities class

    cap.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);//Defining the platform
            cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Moto G (5) Plus");//Defining the Mobile handset name

cap.setCapability(MobileCapabilityType.UDID, "ZY223Z68JG");

    cap.setCapability("automationName", "UiAutomator2");

    cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 100);//Defining the maximum timeout period to execute command

    cap.setCapability("autoGrantPermissions", "true");      

    cap.setCapability(MobileCapabilityType.APP, f2.getAbsolutePath());      

//Use the Android Driver to work with Android Platform Elements
        AndroidDriver<AndroidElement> driver = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"),cap);

return driver;

public class TestApp extends Example2

public static void main(String[] args) throws InterruptedException, MalformedURLException 



       AndroidDriver<AndroidElement> driver = InstallInvokeAPK();

    //AndroidDriver<AndroidElement> driver = PackageActivity("com.e9ine.android.driver", "com.e9ine.android.driver.module.AuthenticationModule.view.activity.SpalshScreenActivity");    

       driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);      

    driver.findElement(By.xpath("//android.widget.EditText[@text='Username']")).sendKeys("abc@xyz.com");        

    driver.findElement(By.id("editText_password")).sendKeys("1234");

    driver.navigate().back();

这些是appium日志:

[Appium] 欢迎使用 Appium v​​1.13.0 [Appium] Appium REST http 接口监听器开始于 0.0.0.0:4723 [HTTP] --> POST /wd/hub/session [HTTP] "desiredCapabilities":"app":"C:\Users\e9ine-QA\Appium\MobileAutomation\src\New Driver app-excel-debug.apk","newCommandTimeout":100,"automationName": "UiAutomator2","autoGrantPermissions":"true","platformName":"Android","udid":"ZY223Z68JG","deviceName":"Moto G (5) Plus","capabilities":"firstMatch" :["appium:app":"C:\Users\e9ine-QA\Appium\MobileAutomation\src\New Driver app-excel-debug.apk","appium:autoGrantPermissions":"true","appium:automationName ":"UiAutomator2","appium:deviceName":"Moto G (5) Plus","appium:newCommandTimeout":100,"platformName":"android","appium:udid":"ZY223Z68JG"] [W3C] 使用 args 调用 AppiumDriver.createSession():["app":"C:\Users\e9ine-QA\Appium\MobileAutomation\src\New Driver app-excel-debug.apk","newCommandTimeout":100 ,"automationName":"UiAutomator2","autoGrantPermissions":"true","platformName":"Android","udid":"ZY223Z68JG","deviceName":"Moto G (5) Plus",null, "firstMatch":["appium:app":"C:\Users\e9ine-QA\Appium\MobileAutomation\src\New Driver app-excel-debug.apk","appium:autoGrantPermissions":"true"," appium:automationName":"UiAutomator2","appium:deviceName":"Moto G (5) Plus","appium:newCommandTimeout":100,"platformName":"android","appium:udid":"ZY223Z68JG" ]] [BaseDriver] 事件“newSessionRequested”记录于 1565779809999(16:20:09 GMT+0530(印度标准时间)) [Appium] Appium v​​1.13.0 创建新的 AndroidUiautomator2Driver (v1.33.1) 会话 [Appium] 能力: [Appium] 平台名称:android [Appium] 应用程序:C:\Users\e9ine-QA\Appium\MobileAutomation\src\New Driver app-excel-debug.apk [Appium] autoGrantPermissions:真 [Appium] 自动化名称:UiAutomator2 [Appium] 设备名称:Moto G (5) Plus [Appium] 新命令超时:100 [Appium] udid: ZY223Z68JG [BaseDriver] W3C 功能 "alwaysMatch":"platformNa... 和 MJSONWP 所需功能 "app":"C:\Users\e9ine-QA... 已提供 [BaseDriver] 使用 W3C 功能创建会话:"alwaysMatch":"platformNa... [BaseDriver] 功能“autoGrantPermissions”从字符串更改为布尔值。这可能会导致意外行为 [BaseDriver] 使用会话 ID 创建的会话:384a04e7-e07c-46ce-887e-a4f69f0993f2 [BaseDriver] 使用本地应用程序 'C:\Users\e9ine-QA\Appium\MobileAutomation\src\New Driver app-excel-debug.apk' [UiAutomator2] 检查应用程序是否实际存在 [ADB] 使用来自“C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe”的“adb.exe” [AndroidDriver] 检索设备列表 [ADB] 尝试查找已连接的安卓设备 [ADB] 正在连接设备... [ADB] 1 个设备已连接 [AndroidDriver] 使用设备:ZY223Z68JG [ADB] 使用来自“C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe”的“adb.exe” [ADB] 设置设备ID为ZY223Z68JG [ADB] 运行 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG shell getprop ro.build.version.sdk' [ADB] 发送命令时出错,重新连接设备并重试:shell,getprop,ro.build.version.sdk [ADB] 尝试查找已连接的安卓设备 [ADB] 正在连接设备... [ADB] 1 个设备已连接 [UiAutomator2] 删除 UiAutomator2 会话 [ADB] 删除转发端口套接字连接:8200 [ADB] 运行 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG forward --remove tcp:8200' [UiAutomator2] 无法删除端口转发'执行 adbExec 时出错。原始错误:'Command 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG forward --remove tcp:8200' exited with code 1'; Stderr: '错误:未知的主机服务';代码:'1'' [ADB] 运行 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG shell getprop ro.build.version.sdk' [ADB] 发送命令时出错,重新连接设备并重试:shell,getprop,ro.build.version.sdk [ADB] 尝试查找已连接的安卓设备 [ADB] 正在连接设备... [ADB] 1 个设备已连接 [BaseDriver] 事件“newSessionStarted”记录于 1565779812994(16:20:12 GMT+0530(印度标准时间)) [W3C] 遇到内部错误运行命令:错误:获取设备 API 级别时出错。原始错误:执行 adbExec 时出错。原始错误:“命令 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG shell getprop ro.build.version.sdk”退出代码 1 '; Stderr:'错误:设备仍在连接';代码:'1' [W3C] 在亚行。 (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-adb\lib\tools\adb-commands.js:98:13) [W3C] 在 Generator.throw () [W3C] 在 asyncGeneratorStep (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules@babel\runtime\helpers\asyncToGenerator.js:3:24) [W3C] 在 _throw (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules@babel\runtime\helpers\asyncToGenerator.js:29:9) [W3C] 运行时 (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\core-js\modules\es6.promise.js:75:22) [W3C] 在 C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\core-js\modules\es6.promise.js:92:30 [W3C] 刷新 (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\core-js\modules_microtask.js:18:9) [W3C] 在 process._tickCallback (internal/process/next_tick.js:61:11) [HTTP]

硒日志:

线程“主”org.openqa.selenium.SessionNotCreatedException 中的异常:无法创建新的远程会话。请检查服务器日志以获取更多详细信息。原始错误:处理命令时发生未知的服务器端错误。原始错误:获取设备 API 级别时出错。原始错误:执行 adbExec 时出错。原始错误:“命令 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG shell getprop ro.build.version.sdk”退出代码 1 '; Stderr:'错误:设备仍在连接';代码:'1' 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:25:48' 系统信息:主机:'DESKTOP-17I5IMK',ip:'192.168.5.208',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0',java.version:'1.8 .0_211' 驱动信息:driver.version:AndroidDriver 远程堆栈跟踪:UnknownError:处理命令时发生未知的服务器端错误。原始错误:获取设备 API 级别时出错。原始错误:执行 adbExec 时出错。原始错误:“命令 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG shell getprop ro.build.version.sdk”退出代码 1 '; Stderr:'错误:设备仍在连接';代码:'1' 在 getResponseForW3CError (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\errors.js:826:9) 在 asyncHandler (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:447:37) 在 process._tickCallback (internal/process/next_tick.js:68:7) 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:25:48' 系统信息:主机:'DESKTOP-17I5IMK',ip:'192.168.5.208',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0',java.version:'1.8 .0_211' 驱动信息:driver.version:AndroidDriver 在 io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:208) 在 io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:217) 在 io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) 在 io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42) 在 io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) 在 io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1) 在 org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131) 在 io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:38) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:84) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:94) 在 io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:95) 在 Test.Example2.InstallInvokeAPK(Example2.java:38) 在 Test.TestApp.main(TestApp.java:35) 引起:java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:186) ... 14 更多 原因:org.openqa.selenium.WebDriverException:处理命令时发生未知的服务器端错误。原始错误:获取设备 API 级别时出错。原始错误:执行 adbExec 时出错。原始错误:“命令 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG shell getprop ro.build.version.sdk”退出代码 1 '; Stderr:'错误:设备仍在连接';代码:'1' 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:25:48' 系统信息:主机:'DESKTOP-17I5IMK',ip:'192.168.5.208',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0',java.version:'1.8 .0_211' 驱动信息:driver.version:AndroidDriver 远程堆栈跟踪:UnknownError:处理命令时发生未知的服务器端错误。原始错误:获取设备 API 级别时出错。原始错误:执行 adbExec 时出错。原始错误:“命令 'C:\Users\e9ine-QA\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s ZY223Z68JG shell getprop ro.build.version.sdk”退出代码 1 '; Stderr:'错误:设备仍在连接';代码:'1' 在 getResponseForW3CError (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\errors.js:826:9) 在 asyncHandler (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:447:37) 在 process._tickCallback (internal/process/next_tick.js:68:7) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62) 在 org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30) 在 org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126) 在 java.util.stream.ReferencePipeline$3$1.accept(未知来源) 在 java.util.Spliterators$ArraySpliterator.tryAdvance(未知来源) 在 java.util.stream.ReferencePipeline.forEachWithCancel(未知来源) 在 java.util.stream.AbstractPipeline.copyIntoWithCancel(未知来源) 在 java.util.stream.AbstractPipeline.copyInto(未知来源) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(未知来源) 在 java.util.stream.FindOps$FindOp.evaluateSequential(未知来源) 在 java.util.stream.AbstractPipeline.evaluate(未知来源) 在 java.util.stream.ReferencePipeline.findFirst(未知来源) 在 org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128) ... 19 更多

【问题讨论】:

请重新格式化您的问题,它不可读 如果需要更多信息,请告诉我。另外,我是***的新手。因此,如果我的问题/代码/标题需要任何编辑,或者可以将它们更改为更具可读性和可理解性的格式,请帮助我。提前感谢您的耐心等待和时间。 【参考方案1】:
    删除您的 Selenium Remote Driver-3.14.0 依赖项,Appium Java Client 7.0.0 包括 selenium-java、selenium-support 和 selenium-api 版本 3.141.59 为 transitive dependencies。如果您特别需要 Selenium 远程驱动程序,我建议将其升级到 3.141.59 以避免任何 API 不一致。 尝试通过运行adb kill-server command 重置您的 ADB 主机。在启动 Appium 测试之前,请确保执行 abd devices 命令并仔细检查您的手机是否处于 connected 状态

参考资料:

Appium: Troubleshooting Appium: Code Examples - Java

【讨论】:

无法在 Windows 上的适用于 Android 的 Appium 1.4.13.1 上运行任何测试

】无法在Windows上的适用于Android的Appium1.4.13.1上运行任何测试【英文标题】:NotabletorunanytestonAppium1.4.13.1forAndroidonwindows【发布时间】:2017-02-1110:57:53【问题描述】:Appium服务器检测到设备但无法发送任何命令,因此未执行任何测... 查看详情

appium自动化测试框架(代码片段)

Appium自动化测试框架环境搭建adb构成和原理连接包名,界面名文件传输获取APP启动时间获取手机日志安装和卸载APP进入到安卓手机内部的Linux系统命令行启动和停止adb服务端查看命令帮助其他命令Appiuminspector工具元素探测包... 查看详情

移动appium测试必知必会(代码片段)

...为Android测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中.    ADB,中文名安卓调试桥,它是一种功能多样的命令行工具,可用于执行各种设备操作(例如安装和调试应用&#x 查看详情

测试新人如何使用python代码封装自动化测试的用例?

如何使用Python和Nose实现自动化测试?本文我将详细介绍使用Appium下的Python编写的测试的例子代码对一个iOS的样例应用进行测试所涉及的各个步骤,而对Android应用进行测试所需的步骤与此非常类似。然后按照安装指南,在你的机... 查看详情

appium自动化测试第一天——基础知识

概述Adb作为PC和Android设备交互与通信的工具Android调试桥接,AndroidDebugBridge,它是一个CS架构的命令行工具,作用就是PC通过adb来操作手机Adb的组成客户端(client):所有命令都是PC发起,可以对Android应用进行安装,卸载和调试(... 查看详情

汽车加油问题出现一些错误。它适用于大多数测试用例,但不适用于所有测试用例。你能告诉我为啥这段代码是错误的

】汽车加油问题出现一些错误。它适用于大多数测试用例,但不适用于所有测试用例。你能告诉我为啥这段代码是错误的【英文标题】:Gettingsomeerrorwithcarrefulingproblem.Itworksformostofthetestcasesbutnotforall.Canyouplstellmewhythiscodeiswrong汽车... 查看详情

ios自动化测试工具都有哪些

1.Appium(免费)一款开源的移动测试自动化工具,适用于Android和iOS系统。链接:http://appium.io/2、Frank(免费)Frank只允许测试iOS应用,值得一提的是它的开源框架结合了JSON和Cucumber。链接:https://github.com/moredip/Frank3、KIFforiOS(免费)KIF是... 查看详情

无法更新 \tools - 适用于 Windows 的 Android SDK 命令行工具

】无法更新\\\\tools-适用于Windows的AndroidSDK命令行工具【英文标题】:Can\'tupdate\\tools-AndroidSDKCommandLineToolsforWindows无法更新\\tools-适用于Windows的AndroidSDK命令行工具【发布时间】:2017-10-0310:35:05【问题描述】:我刚刚下载了适用于Win... 查看详情

Appium : 能否用于跨平台应用测试

...序对ios(ipa)和android(apk)具有相同的界面。我可以编写一个自动化脚本并在两个平台上运行它,即适用于android和ios应用程序。有人用Appium试 查看详情

基于linux环境的自动化测试的研究应用

...因此找出工具的适用范围以及探索工具的实现程度是进行自动化测试应用的前提。  (二)各种技术应用的环境需求。对于各类工具,需要关注编译和运行时对各种包和库及其版本的依赖关系以及对预先安装的应用的依赖关系。... 查看详情

移动端自动测试工具appium快速入门(代码片段)

文章目录一、前言二、Appium概述1、架构图2、UI自动化收益三、环境安装1、桌面版本安装2、DOS命令安装3、安装SDK四、常用操作方法五、常见定位方式1、ID定位2、name定位3、xpath定位4、定位h5页面六、简单demo示例七、运行效果八... 查看详情

gui自动化测试中优化测试用例思维方法

...据驱动)让操作相同但是数据不同的测试可以通过同一套自动化测试脚本来实现,只是在每次测试执行时提供不同的测试输入数据。2、页面对象模型(POM)以页面为单位来封装页面上的控件以及控件的部分操作。而测试用例使... 查看详情

已安装 xCode 命令行工具,但不可见

...6-1601:20:48【问题描述】:我想运行appium来对我的应用进行自动化测试。为此,我需要使用命令行工具运行一些命令。这是我第一次尝试这样做。如果我去preferences&gt;downloads&gt;"commandlinetools 查看详情

appinum自动化测试利器入门(代码片段)

文章目录1前言2什么是Appinum?3环境准备3.1设置JDK变量3.2设置Android环境3.3下载Appium工具3.4下载AppiumInspector工具3.5手机需要开启调试模式4启动Appium服务5连接Appinum服务5.1使用命令行连接5.2使用`AppiumInspector`工具连接6常用命... 查看详情

Appium-uiAutomator 适用于 android 但不适用于 iOS

】Appium-uiAutomator适用于android但不适用于iOS【英文标题】:Appium-uiAutomatorisworkingfineforandroidbutnotiOS【发布时间】:2017-08-2005:27:37【问题描述】:我正在尝试使用以下代码滚动到一个元素:@AndroidFindBy(uiAutomator="newUiScrollable(newUiSelector... 查看详情

如何为 Android 自动化设置 Appium 环境?

】如何为Android自动化设置Appium环境?【英文标题】:HowtosetupAppiumEnvironmentforAndroidAutomation?【发布时间】:2013-07-2513:56:38【问题描述】:我在测试中担任SD。我是Appium自动化工具的新手,这个工具对我来说设置环境非常棘手。我参... 查看详情

尝试运行 appium 但应用程序自动关闭并显示错误

...置。我已经安装了appium1.21.0并使用androidstudio创建了一个测试用例。测试完成后,我看到的是它关闭了应用程序。我在androi 查看详情

python+appium+yaml安卓ui自动化测试分享(代码片段)

一、实现数据与代码分离,维护成本较低,先看看自动化结构,大体如下:testyaml管理用例,实现数据与代码分离,一个模块一个文件夹public存放公共文件,如读取配置文件、启动appium服务、读取Yaml文件、定义日志格式等page存... 查看详情