当前位置:   article > 正文

Appium: Windows系统桌面应用自动化测试(一) 【环境搭建】_appium windows

appium windows

一、工具选择

1、windows桌面应用自动化 采用Python+Appium+WinAppDriver+Pytest
(1)WinAppDriver是微软开发的自动化测试工具,而windows是微软开发的,兼容性应该极好。

(2)WinAppDriver也可以是appium的一个自动化框架,而Appium 支持python语言。

(3)Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。它把这些系统本身提供的框架包装进一套 API —— WebDriver API 中。WebDriver,即Selenium WebDriver。

1、WinAppDriver

Windows Application Driver (WinAppDriver)是Windows系统上的一个应用程序驱动工具,使用该驱动程序,测试人员能够通过Appium-Python-Client依赖库完成对Windows桌面程序的自动化操作。
对于熟悉Appium的人员来说,可以轻松上手且完成WinApp自动化测试脚本的编写。本节就来介绍WinAppDriver工具。

(1)简介

WinAppDriver是Windows系统上的一个应用程序驱动工具,开源免费。与Selenium工具类似,都是用来实现产品UI自动化测试的一个工具。

WinAppDriver运行时对系统是有要求的,只能运行在Windows10或Windows Server 2016以上系统。如果测试程序兼容性,WinAppDriver很显然不能满足Windows10或Windows Server 2016以下系统的测试。因此使用WinAppDriver实现的自动化测试脚本是有局限性的。

WinAppDriver支持测试UWP、WinForms、WPF、Win32应用程序。

  • UWP:Universal Windows Platform,即Windows通用应用平台,在Windows 10 Mobile/Surface(Windows平板电脑)/PC/Xbox/HoloLens等平台上运行。它并不是为某一个终端而设计,而是可以在所有Windows10设备上运行。

  • WinForms:Windows Forms,是微软的.NET开发框架的图形用户界面部分,该组件通过将现有的Windows API(Win32 API)封装为托管代码提供了对Windows本地(native)组件的访问方式。

  • WPF:Windows Presentation Foundation,是微软推出的基Windows的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。

  • Win32:Classic Windows,是标准windows程序,完全拥有window的特性,可以通过鼠标点击窗口来完成控制。

WinAppDriver支持Appium,测试人员可以借助Appium的客户端Appium-Python-Client来编写自动化测试脚本,无论从语法还是脚本编写的思路构建上,都是相同的,减少了学习成本。

综上所述,WinAppDriver有以下优点:

  • 它是一个开源工具,它使用Web驱动协议。

  • 它是免费的,由微软开发。

  • WinAppDriver可以与Selenium和Appium项目集成在同一种语言中。

  • 可以在WinAppDriver中使用任何编程语言。

  • 可以使用Xpath和其他属性来定位UI元素。

二、环境搭建

初次使用WinAppDriver,借助Appium客户端编写自动化测试脚本需要经过安装WinAppDriver>>开启开发人员模式>>安装Appium客户端>>运行WinAppDriver.exe程序>>编写测试脚本,五个步骤。

1、WinAppDriver环境搭建

(1)开启开发者选项中的“开发人员模式”

WinAppDriver的运行需要开启开发人员模式,否则无法运行。依次进入计算机的设置>>更新和安全>>开发者选项,将【开发人员模式】打开
在这里插入图片描述

(2)windows sdk下载安装

  • ①下载地址:windows sdk
    在这里插入图片描述
  • ②选择路径安装即可
    在这里插入图片描述

(3)WinAppDriver下载安装

  • ①点击下载链接,并任选一个版本,打开如下图,接着根据需求选择合适自己的安装包下载即可

下载地址:WinAppDriver
在这里插入图片描述

  • ②一键安装
    在这里插入图片描述
  • ③搜索一下安装路径

如图,默认路径为:C:\Program Files\Windows Application Driver
安装完成会有一个WinAppDriver.exe程序文件,这便是WinAppDriver的启动文件。
在这里插入图片描述

  • ④双击打开出现以下画面则安装成功
    进入WinAppDriver的安装路径,以管理身份运行WinAppDriver.exe程序。启动成功后会弹出一个命令行窗口,提示“Windows Application Driver listening for requests at: http://127.0.0.1:4723/”,在这里插入图片描述
    WinAppDriver启动后默认会IP地址和端口号为127.0.0.1:4723上的请求,在使用时我们可以配置监听的IP地址和端口号,示例如下:
WinAppDriver.exe 4727
WinAppDriver.exe 10.0.0.10 4725
WinAppDriver.exe 10.0.0.10 4723/wd/hub
  • 1
  • 2
  • 3

WinAppDriver.exe所在路径下,执行命令WinAppDriver.exe 4727即可完成
在这里插入图片描述

2、appium环境搭建

(1)appium的官方文档

http://appium.io/docs/cn/about-appium/intro/

(2)根据官方文档,采用Appium的桌面方式进行安装,而且是一键安装

下载地址:https://github.com/appium/appium-desktop/releases
在这里插入图片描述
在这里插入图片描述

(3)打开如图界面则安装成功

在这里插入图片描述

3、使用Appium连接WinAppDriver

(1)操作步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(2)json配置,参数如下

{
        "app": "C:\\Program Files\\XMind\\XMind.exe",
        "deviceName": "WindowsPC",
        "platformName": "Windows"
}
  • 1
  • 2
  • 3
  • 4
  • 5

(3)Appium桌面版提供的功能

  • ①可作为客户端或服务器使用

  • ②提供元素查找功能

  • ③提供脚本录制功能

  • ④其他

三、简单使用

1、查找元素

(1)windows sdk安装路径中,有一个查找元素的组件,叫 inspect.exe,可通过搜索找到,并双击运行。打开如图界面,可以查看元素的名称,和元素支持的点击等操作。

也可能没有,附上下载链接 inspect-exe
在这里插入图片描述

(2)inspect.exe查找到的元素的键值对,与python语言使用方法的对应关系,如下表:

inspect.exe查找到的键值对python查找元素的方法
AutomationIddriver.find_element_by_accessibility_id()
ClassNamedriver.find_element_by_class_name()
RuntimeId (decimal)driver.find_element_by_id()
Namedriver.find_element_by_name()
LocalizedControlType (upper camel case)driver.find_element_by_tag_name()
Anydriver.find_element_by_xpath()

2、编写脚本

前面,我们已经使用Appium作为客户端成功连接了服务端WinAppDriver;现在,我们通过python脚本连接WinAppDriver。

(1)打开pycharm创建虚拟环境,并打开虚拟环境的cmd对话窗口,安装如下:

pip install Appium-Python-Client1.2.0 注意版本一定要是1.2.0
pip install Selenium
3.141.0
在这里插入图片描述

python使用appium时出现错误
{“status”:100,“value”:{“error”:“invalid argument”,“message”:“Bad capabilities. Specify either app or appTopLevelWindow to create a session”}}

注意检查Appium-Python-Client 是否是1.2.0
  • 1
  • 2
  • 3
  • 4

(2)编写脚本,实现连接,代码如下

 from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait


# appium服务监听地址(WinAppDriver地址)
server='http://127.0.0.1:4723'
# app启动参数
desired_caps={
       "app": "C:\\Program Files\\XMind\\XMind.exe",
       "deviceName": "WindowsPC",
       "platformName": "Windows"
}
# 连接
driver = webdriver.Remote(server, desired_caps)
wait = WebDriverWait(driver, 30)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

appium默认监听端口为4723 WinAppDriver监听端口也为4723 会存在冲突所有一般会自定义了WinAppDriver端口
在这里插入图片描述

# appium服务监听地址(WinAppDriver地址)
修改server='http://127.0.0.1:4727'
  • 1
  • 2

在这里插入图片描述

3、简单实例

例如编写一个简单的脚本,启动写字板应用,然后点击最大化按钮,接着点击关闭按钮关闭写字板应用。代码如下:

# winApp_demo.py
import time

from appium import webdriver
from selenium.webdriver.common.by import By

# 添加启动参数
desired_caps = {}
desired_caps['app'] = r"C:\Program Files\Windows NT\Accessories\wordpad.exe"
# 客户端连接 Server,启动 Session 会话
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723', desired_capabilities=desired_caps)
time.sleep(3)

# 定位 最大化 按钮,并点击
driver.find_element(by=By.NAME, value="最大化").click()
time.sleep(1)
# 定位 关闭 按钮,并点击
driver.find_element(by=By.NAME, value="关闭").click()
# 关闭会话
driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

运行脚本后,会观察到计算机上启动了写字板应用,然后最大化,接着就被关闭。

  • 上面代码中在启动参数中添加了app参数,指明要启动程序;

  • 定位元素使用的是Selenium提供的定位方式,通过元素的NAME属性进行定位,然后对元素点击操作;

  • 最后使用quit()方法结束会话。

4、说明

整体语法与之前讲解的Web测试自动化和APP测试自动化是相同的,因此很容易掌握。

注意:使用WinAppDriver进行自动化测试时,由于与Appium、Selenium之间的兼容性处理不是很好,因此会许多意想不到的问题。

例如使用高版本的Selenium和Python时,在点击元素时可能会出现“‘dict’ object has no attribute ‘click’”异常,此时就需要将Selenium 版本由4降到3,又或者将Python版本降级到3.6解决。

因为正常定位到的元素是WebElement对象,而非字典。但相信随着这三个工具不断地更新迭代,这些问题都会得到解决。在此笔者WinAppDriver使用的版本是1.2,Appium-Python-Client版本是1.2.0,Selenium版本是3.0.0a1。

4.1、Bad capabilities. Specify either app or appTopLevelWindow to create a session 问题解决

  • 现象
    在这里插入图片描述在这里插入图片描述

  • 解决方案

  • appium-python-client 版本安装出错

  • 安装1.2.0版本 pip install Appium-Python-Client==1.2.0

  • 在这里插入图片描述

4.2、ValueError: Timeout value connect was <object object at 0x00000186013c7E60>, but it must be an int, float or None.

  • 现象

在这里插入图片描述

  • 解决方案
  • urllib3 版本出错
  • 安装1.26.2版本 pip install urllib3==1.26.2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/1001889
推荐阅读
相关标签
  

闽ICP备14008679号