在本文中,我想分享我的经验,以解决在Android上启动对移动应用程序进行自动化测试的问题。
我会说的是:
- 如何使用Appium运行自动化测试环境
(PC作业系统-Windows 10) - 如何避免尝试在混合应用程序中运行测试时发生的一些错误
- 一些基本命令可以运行最简单的测试。 我们将使用Java和JavaScript
挑战赛
自动化混合移动应用程序测试。
关于要测试的应用程序:
这些也许是影响PC运行测试的配置的关键点。
测试环境
我们将使用Appium作为自动测试工具。
简而言之,这是一个工具,使您可以使用服务器将命令发送给客户端,然后执行操作以及原因。
您可以在
开发者的网站上获取完整的信息。
让我们开始吧。
在磁盘上方便您放置的位置,创建“ Appium automation”文件夹。
例如:
C:\Appium automation
进一步在此文件夹(C:\ Appium自动化)中创建更多文件夹:
如果您已安装了任何应用程序/组件,则按照说明进行操作即可理解关系的逻辑,即 无需重新安装所有内容。
填充创建的文件夹并加载其他组件
1. Java SDK
单击链接,然后单击下载:

接下来,我们转到不同操作系统的下载页面,如下所示 我有Windows 10 x64,请选择:

下载文件后,将其打开并解压缩.exe-shnik(在安装过程中选择路径)到该文件夹:
C:\Program Files\Java\jdk-12.0.1
(下载时的版本号可能会有所不同)2. Android Studio和Android SDK
要下载,请
点击链接 。
安装在以下文件夹中:
C:\Appium automation\Android Studio
在首次启动Android Studio的过程中,您需要
配置程序 :
- 安装类型选择“自定义”,然后单击“下一步”。
- 选择您喜欢的主题,然后单击“下一步”。
- Android SDK位置指定C:\ Appium自动化\ Android SDK,单击下一步
- 仿真器设置可以保留在“推荐”上,单击“下一步”。
- 单击完成,然后等待安装过程完成。
在Android Studio中创建一个新项目:- 点击开始一个新的Android Studio项目
- 指明项目的名称,路径,或者您什么也不能更改,并保留建议的名称,请单击“下一步”。
- 在“手机和平板电脑”下拉列表中,选择“ API 23:Android 6.0(棉花糖)”,然后单击“下一步”。
- 选择清空活动,单击下一步
- 点击下一步
- 点击完成
安装SDK工具在Android Studio中,选择“工具”“ SDK管理器”。
在出现的窗口中,将选择“ Android SDK”部分。

在“ SDK平台”选项卡上,选择要在其上进行测试的Android版本。
并且,在SDK工具上,选择以下项目:
- Android SDK构建工具
- Android模拟器
- Android SDK平台工具
- Android SDK工具
- Android SDK文档
- 支持资料库
单击“应用”或“确定”,然后等待组件的下载和安装完成。

3.创建PATH变量
右键单击“我的电脑”-“属性”-“高级系统设置”。
在打开的窗口的“高级”选项卡上,选择“环境变量...”
在“系统变量”块中,创建一个新变量。

第一个变量变量名-JAVA_HOME
变量的值为
C:\Program Files\Java\jdk-12.0.1
(在步骤1中安装jdk的路径,在某些情况下,可能是Program Files文件夹称为Program Files(x86))
第二变数变量名-ANDROID_HOME
变量的值为
C:\Appium automation\Android SDK
路径变量加法在系统变量列表中找到Path变量,然后单击“更改...”。
在出现的窗口中单击“创建”,然后添加变量:
- %ANDROID_HOME%\模拟器
- %ANDROID_HOME%\平台工具
- %ANDROID_HOME%\工具
- %ANDROID_HOME%\工具\ bin
因此,您应该获得4个新变量,之后需要单击“确定”。

4.鸦片
下载Appium:
运行下载的.exe文件,然后在PC上安装Appium。 在安装过程中,您仅需要选择全局安装或特定用户安装。 我从全球安装 对我来说没关系。
下载Appium库:
将下载的.jar文件移动到文件夹
C:\Appium automation\Appium Lib

将下载的.jar文件移动到文件夹:
C:\Appium automation\Appium Lib

将下载的.jar文件移动到文件夹:
C:\Appium automation\Appium Lib
下载Selenium库:
将下载的档案解压缩到该文件夹中:
C:\Appium automation\Selenium Lib
5. IntelliJ IDEA社区版
要下载,请转到链接
https://www.jetbrains.com/idea/download在社区版本附近,单击下载(这是一个免费版本,但足以进行自动测试)。
下载页面比较了Community和Ultimate版本。
如果您想购买旗舰版,可以放心地购买! 但是,再一次,社区版本就足够了。
运行下载的.exe文件并安装(只需单击“下一步”,直到程序开始安装)
首次推出IntelliJ IDEA- 选择“不导入设置”
- 我们接受许可协议
- 选择一个话题
- 点击下一步
- 单击“开始使用IntelliJ IDEA”
在IntelliJ IDEA中创建项目- 选择创建新项目
- 指定Java SDK的路径
- 点击新建...
- 指定以前加载的Java SDK C的路径:\ Program Files \ Java \ jdk-12.0.1
- 点击下一步
- 选中“根据模板创建项目”框
- 点击下一步
- 指定要保存的项目名称和位置
- 点击完成
创建项目的设置选择文件-项目结构...
在出现的窗口中,选择模块-依赖关系-“ +”-JAR或目录...

然后,我们将所有先前加载的库添加到项目中。

单击确定。
现在,该项目可以运行测试了。
6. Android设备设置
真实设备您需要USB电缆将设备连接到计算机和智能手机本身。
要开始使用,请转到智能手机中的“设置”-“关于手机”。
此外,在不同的智能手机上,一切都不同,但最重要的是,您需要找到“序列号”并单击5-7次,直到烤面包机显示“您现在是开发者”(通知文本因型号而异)
完成此操作后,“针对开发人员”部分将显示在手机的设置中。 他还可以在不同部分的模型之间进行隐藏,例如,将在“设置”-“对于开发人员”中的某个地方,以及在“设置”-“特殊功能”-“针对开发人员”中的某个地方。 。
您需要转到“面向开发人员”部分并激活“ USB调试”。
通过USB连接智能手机时,您会看到一条有关USB调试权限的消息,您可以选中“信任此设备”并单击“确定”,然后在下次将手机连接到此PC时不再显示此消息。
您所有的智能手机都可以在自动测试中使用。
虚拟装置您也可以通过Android Studio创建虚拟设备,然后无需将真实设备连接到计算机。
但是在虚拟设备上,测试的速度可能比在真实设备上慢。
为了创建它,请打开Android Studio,然后:
- “工具”-“ AVD管理器”-“ +创建虚拟设备...”
- 选择一个设备,单击下一步
- 选择所需的Android版本,单击“下一步”。
- 指定设备名称,单击完成
完成“工具”-“ AVD管理器”部分中的操作后,您将看到创建的设备。 使用绿色的“播放”图标,可以启动设备。
如何检查您的PC是否看到了已连接的设备?运行命令行(“开始”-“实用程序-Windows”-“命令提示符”)
并输入adb devices命令。
因此,如果设备启用了“ USB调试”功能,则您将收到所连接的设备及其UDID(序列号):
List of devices attached UDID device
7.我们正在编写一个项目
添加导入。 package name; import java.util.*; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElement; import io.appium.java_client.remote.MobileCapabilityType; import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.JavascriptExecutor; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit;
我们注册服务器以及它将在哪里发送请求安装Android驱动程序:
AndroidDriver<AndroidElement> driver = null;
我们设置参数(属性):
DesiredCapabilities capabilities = new DesiredCapabilities();
设备的名称(您可以在“设置”-“关于电话”中找到真实设备,在虚拟的“工具”-“ AVD管理器”-“名称”字段中找到该设备):
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "MyPhone");
链接到将需要启动的APK(.apk必须是调试版本,以便您和appium可以检查应用程序):
capabilities.setCapability(MobileCapabilityType.APP, "C:\\Appium automation\\APK\\My-debug-Apk.apk");
启动Appium驱动程序:
try { driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } catch (MalformedURLException e) { System.out.println(e.getMessage()); }
此代码足以在连接的设备上启动您的应用程序。
其他团队为了将项目挂起一定的时间,例如8秒。 (值以毫秒为单位)。 如果您需要等待页面或应用程序加载,则可能有必要:
Thread.sleep(8000);
我们获得了ContextHandles,可以在其中了解我们正在使用的内容(NATIVE_APP或WEBVIEW):
Set<String> contextNames = driver.getContextHandles(); for (String contextName : contextNames) { System.out.println(contextName); }
将上下文分配给数组中接收到的最后一个值。 这将使您能够正确切换到tb的WEBVIEW。 默认上下文= NATIVE_APP:
driver.context((String) contextNames.toArray()[contextNames.toArray().length - 1]);
我们控制应用程序界面因为 我们正在使用混合应用程序,即 应用程序元素是在WEBVIEW中呈现的,而不是在NATIVE_APP中呈现的,那么大多数时候我们将不得不对findElementByCssSelector元素使用一种类型的搜索。
单击确定按钮:
driver.findElementByCssSelector(".button-ok").click();
-其中.button-ok是元素类。 您也可以完全使用元素ID。
我们在字段中发送值,例如,您进行搜索,并且您想要在此处发送值“电影院”。
driver.findElementByCssSelector(".search-input").sendKeys("");
点击查找:
driver.findElementByCssSelector(".search-button").click();
这样,您就可以控制您的应用程序了。
迟早会遇到这种情况,并非所有内容都放置在智能手机屏幕上,即 您需要滚动。 如果在测试过程中屏幕上看不到某个元素,则Appium将抛出一个错误,即看不到该元素,并且很可能所有其他测试都将被错误覆盖。
为了在屏幕上滚动,您可以在Java中执行JS函数scrollIntoView。
((JavascriptExecutor) driver).executeScript("document.querySelector('.button-ok').scrollIntoView({block: \"end\", behavior: \"smooth\"});");
就我而言,这将允许您转到“确定”按钮。
您可能正确地编写了所有内容,但是没有执行滚动可能是一个事件。
尝试绑定到屏幕上的其他元素,首先最好通过Chrome-Inspect中的控制台执行此操作,因此可以确保您了解,绑定到此元素后,滚动将起作用。
您可以转到步骤8,如果一切都对您有用,那就太好了!
但是我还有另一个陷阱。
他的名字叫Crosswalk Browser。
当我开始这个项目时,我经常犯一个错误:
“Make sure the app has its webview configured for debugging”
这意味着没有一项测试没有执行。
在这种情况下,您需要检查什么:
- 确保您有调试版本
- 确保调试版本允许Inspect-a应用程序
- 安装固定的chromedriver
完成这些操作后,向您的项目添加其他功能。
capabilities.setCapability("chromedriverExecutable", "C:\\node_modules\\appium-with-crosswalk-fix\\chromedriver\\2.28\\chromedriver.exe");
-其中C:\\ node_modules \\ appium-with-crosswalk-fix \\ chromedriver \\ 2.28 \\ chromedriver.exe
这是固定chromedriver的方法
因此,您的项目将如下所示: package name; import java.util.*; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElement; import io.appium.java_client.remote.MobileCapabilityType; import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.JavascriptExecutor; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws InterruptedException { AndroidDriver<AndroidElement> driver = null; DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "MyPhone"); capabilities.setCapability(MobileCapabilityType.APP, "C:\\Appium automation\\APK\\My-debug-apk.apk"); capabilities.setCapability("chromedriverExecutable", "C:\\node_modules\\appium-with-crosswalk-fix\\chromedriver\\2.28\\chromedriver.exe"); try { driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } catch (MalformedURLException e) { System.out.println(e.getMessage()); } Set<String> contextNames = driver.getContextHandles(); for (String contextName : contextNames) { System.out.println(contextName); } driver.context((String) contextNames.toArray()[contextNames.toArray().length - 1]); Thread.sleep(8000); driver.findElementByCssSelector(".search-input").sendKeys(""); driver.findElementByCssSelector(".search-button").click(); }
这样的项目:
- 在设备上安装应用程序。
- 在应用程序页面上找到搜索字段
- 将带来“电影院”的含义
- 点击“搜索”按钮
8.我们开始这个项目
一个项目的开始有几个要点:
- 启动Appium服务器(项目4)
- 将设备连接到PC或启动虚拟设备(项目6)
- 设置项目(第5页和第7页)
- 单击运行(或在IntelliJ IDEA工具栏上,或运行-运行“主”)
- 享受结果
好了,您就可以自由测试设置了,必要的信息在
开发人员的官方网站上。
Appium也可以用于测试iOS应用程序。
我想简短地写,但结果还是一如既往。
感谢所有读完本书的人,希望它对您有用!