设置混合应用程序的自动测试

在本文中,我想分享我的经验,以解决在Android上启动对移动应用程序进行自动化测试的问题。

我会说的是:


  • 如何使用Appium运行自动化测试环境
    (PC作业系统-Windows 10)
  • 如何避免尝试在混合应用程序中运行测试时发生的一些错误
  • 一些基本命令可以运行最简单的测试。 我们将使用Java和JavaScript

挑战赛


自动化混合移动应用程序测试。

关于要测试的应用程序:
平台平台安卓系统
构架角形,科尔多瓦,离子
浏览器人行横道

这些也许是影响PC运行测试的配置的关键点。

测试环境


我们将使用Appium作为自动测试工具。
简而言之,这是一个工具,使您可以使用服务器将命令发送给客户端,然后执行操作以及原因。

您可以在开发者的网站上获取完整的信息。

让我们开始吧。

在磁盘上方便您放置的位置,创建“ Appium automation”文件夹。

例如:

C:\Appium automation 

进一步在此文件夹(C:\ Appium自动化)中创建更多文件夹:
Android SDKC:\ Appium自动化\ Android SDK
Android StudioC:\ Appium自动化\ Android Studio
APKC:\ Appium自动化\ APK
阿皮库C:\ Appium自动化\ Appium Lib
硒库C:\ Appium自动化\ Selenium Lib

如果您已安装了任何应用程序/组件,则按照说明进行操作即可理解关系的逻辑,即 无需重新安装所有内容。

填充创建的文件夹并加载其他组件


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:

  • 我们点击链接http://appium.io/
  • 点击下载
  • 我们选择Appium-windows-1.13.0.exe(加载时的版本号可能会有所不同)



运行下载的.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” 

这意味着没有一项测试没有执行。

在这种情况下,您需要检查什么:


完成这些操作后,向您的项目添加其他功能。

 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)
    • 使用快捷方式启动Appium
    • 点击“启动服务器”
  • 将设备连接到PC或启动虚拟设备(项目6)
  • 设置项目(第5页和第7页)
  • 单击运行(或在IntelliJ IDEA工具栏上,或运行-运行“主”)
  • 享受结果

好了,您就可以自由测试设置了,必要的信息在开发人员的官方网站上。
Appium也可以用于测试iOS应用程序。

我想简短地写,但结果还是一如既往。

感谢所有读完本书的人,希望它对您有用!

Source: https://habr.com/ru/post/zh-CN452742/


All Articles