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

Posted

技术标签:

【中文标题】自动化测试用例适用于 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

【讨论】:

以上是关于自动化测试用例适用于 appium 命令行工具,但不适用于桌面客户端的主要内容,如果未能解决你的问题,请参考以下文章

移动appium测试必知必会

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

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

Appium自动化测试框架

python+appium自动化测试-Bat批处理执行测试用例

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