python模拟拖拽文件_自动化Appium第一个Demo原生(Python版)

点击上方蓝字,选择“设为星标”

第一时间关注技术干货!

7bbd45795edee2a01948a7ed8815c1c8.png

第一个Demo-原生

本章原生所指的就是App移动应用本身。

第1章 Android

1.1创建项目

1、启动PyCharm,创建My_Appium_Demo项目。创建demo包,之后创建脚本文件。例如:模拟器示例为Android_App_Simulator,真机示例为Android_App_RealMachine

如图所示:

3c100033187d72c8fb8cd2b55a55666a.png

2、创建app文件夹,用来存放应用程序。把应用程序testApp.apk拷贝到文件夹里。

e0631f3dc1c02e381eaaee4c0eaf18dc.png

3、打开项目解释器(File--->Settings...--->Project:--->Project Interpreter),确保Appium-Python-Client包已经被项目引用。

900294752867d4d49ace4ff0d157848a.png

1.2编写脚本

1.2.1模拟器

1、本章示例模拟器使用的是Genymotion,首先打开Genymotion模拟器,打开指定的Android版本。

2、首先获取模拟器设备标识,命令行输入命令 adb devices

如图所示,只查询到1台此模拟器,在脚本里可以不用添加此参数

desired_caps['udid'] = '192.168.89.101:5555'

就可以指定此台模拟器执行。

4ab4816509fc7e3ec3621a046962df2c.png

如果是多台设备,如图所示,查询到2台(1台模拟器192.168.89.101:5555、1台真机MYV0215825000026),在脚本就要添加此参数

desired_caps['udid'] = '192.168.89.101:5555'

测试执行的时候来指定这台模拟器执行。

4cafa7e65425d707adbc80807338a5a7.png

3、模拟器里没有要测试的应用程序,可以在执行自动化测试前先安装到模拟器里,输入安装命令 adb install -r 进行安装,或者使用手机助手进行安装,或者直接将.apk应用程序拖拽到模拟器上进行安装。

4、模拟器里没有要测试的应用程序,想在自动化测试执行的时候自动安装。则需要在脚本里添加如下代码:

# `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
# Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
# 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
# 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
desired_caps['app'] = os.path.abspath('C:\\PycharmProjects\\My_Appium_Demo\\app\\testApp.apk')

5、当模拟器里有要测试的应用程序,每次执行测试脚本可以不用安装被测应用,只要指定appPackage和appActivity就可以了。

6、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Android SDK的uiautomatorviewer工具查找元素。

7、脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from appium import webdriver
import os
import time
"""
Android-原生-模拟器
"""
# 定义启动设备需要的参数
desired_caps = {}

# 使用哪个自动化测试引擎
# 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
desired_caps['automationName'] = 'Appium'

# 使用哪个移动操作系统平台 iOS, Android, FirefoxOS
desired_caps['platformName'] = 'Android'

# 移动操作系统版本
desired_caps['platformVersion'] = '6.0'

# 使用的移动设备或模拟器的类型
# iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4 等等
# 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
# 在Android上,这个关键字目前不起作用
desired_caps['deviceName'] = 'honor'

# 连接的物理设备的唯一设备标识
desired_caps['udid'] = '192.168.89.101:5555'

# `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
# Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
# 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
# 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
desired_caps['app'] = os.path.abspath('C:\\PycharmProjects\\My_Appium_Demo\\app\\testApp.apk')

# 要运行Android应用的包名
desired_caps['appPackage'] = 'com.example.testapp'

# 要从包中启动的Android activity的活动名称
desired_caps['appActivity'] = 'com.example.testapp.MainActivity'

# 启用Unicode输入法,设置为true可以输入中文字符,默认为false
desired_caps['unicodeKeyboard'] = True

# 在设定了`unicodeKeyboard`关键字运行Unicode测试结束后,将键盘重置为其原始状态
# 如果单独使用,将会被忽略,默认值`false`
desired_caps['resetKeyboard'] = True

# 在此会话之前不要重置应用程序状态
# Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
# IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
desired_caps['noReset'] = True

# 执行完整的重置
# Android 停止应用程序,清除应用程序数据并在测试后卸载apk
# IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
desired_caps['fullReset'] = False

# 设置命令超时时间,单位:秒
# 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
desired_caps['newCommandTimeout'] = 60

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
print("启动应用程序")

# 输入框输入百度首页
driver.find_element_by_id("com.example.testapp:id/urlField").send_keys("https://www.baidu.com/")

# 点击GO
driver.find_element_by_id("com.example.testapp:id/goButton").click()

time.sleep(2)
driver.quit()

1.2.2真机

1、首先获取真机设备标识,命令行输入命令 adb devices

dd05063c417e63b998b578e16e4a7390.png

2、真机设备里没有要测试的应用程序,可以在执行自动化测试前先安装到设备里,输入安装命令 adb install -r 进行安装,或者使用手机助手进行安装。

3、真机设备里没有要测试的应用程序,想在自动化测试执行的时候自动安装。则需要在脚本里添加如下代码:

# `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
# Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
# 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
# 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
desired_caps['app'] = os.path.abspath('C:\\PycharmProjects\\My_Appium_Demo\\app\\testApp.apk')

4、当真机设备里有要测试的应用程序,每次执行测试脚本可以不用安装被测应用,只要指定appPackage和appActivity就可以了。

5、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Android SDK的uiautomatorviewer工具查找元素。

6、脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from appium import webdriver
import os
import time
"""
Android-原生-真机
"""
# 定义启动设备需要的参数
desired_caps = {}

# 使用哪个自动化测试引擎
# 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
desired_caps['automationName'] = 'Appium'

# 使用哪个移动操作系统平台 iOS, Android, FirefoxOS
desired_caps['platformName'] = 'Android'

# 移动操作系统版本
desired_caps['platformVersion'] = '6.0'

# 使用的移动设备或模拟器的类型
# iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4 等等
# 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
# 在Android上,这个关键字目前不起作用
desired_caps['deviceName'] = 'honor'

# 连接的物理设备的唯一设备标识
desired_caps['udid'] = 'MYV0215825000026'

# `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
# Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
# 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
# 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
desired_caps['app'] = os.path.abspath('C:\\PycharmProjects\\My_Appium_Demo\\app\\testApp.apk')

# 要运行Android应用的包名
desired_caps['appPackage'] = 'com.example.testapp'

# 要从包中启动的Android activity的活动名称
desired_caps['appActivity'] = 'com.example.testapp.MainActivity'

# 启用Unicode输入法,设置为true可以输入中文字符,默认为false
desired_caps['unicodeKeyboard'] = True

# 在设定了`unicodeKeyboard`关键字运行Unicode测试结束后,将键盘重置为其原始状态
# 如果单独使用,将会被忽略,默认值`false`
desired_caps['resetKeyboard'] = True

# 在此会话之前不要重置应用程序状态
# Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
# IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
desired_caps['noReset'] = True

# 执行完整的重置
# Android 停止应用程序,清除应用程序数据并在测试后卸载apk
# IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
desired_caps['fullReset'] = False

# 设置命令超时时间,单位:秒
# 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
desired_caps['newCommandTimeout'] = 60

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
print("启动应用程序")

# 输入框输入百度首页
driver.find_element_by_id("com.example.testapp:id/urlField").send_keys("https://www.baidu.com/")

# 点击GO
driver.find_element_by_id("com.example.testapp:id/goButton").click()

time.sleep(2)
driver.quit()

1.3执行脚本

1.3.1模拟器

1、开启Appium服务(任选一种即可)

方式一:开启Appium Server

打开命令行,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override

如图所示,Appium服务开启。

d395de4a70da765bf6b241f0c5a6f439.png

方式二:开启Appium Desktop

打开Appium Desktop

62728cb65f692bf59db681faad204bea.png

如服务IP和端口默认的情况下,直接点击Start Server v1.8.0来开启Appium服务,如图所示。

8742676ef1d97997bfb1e96f7cf40af3.png

2、选中脚本鼠标右键Run,执行测试脚本。

脚本执行步骤:

(1)打开testApp.apk应用程序

(2)输入框输入百度首页

(3)点击GO

(4)关闭应用程序

81835f3c39d163c05699f67bd493c01a.png

1.3.2真机

1、开启Appium服务(任选一种即可)

方式一:开启Appium Server

打开命令行,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override

如图所示,Appium服务开启。

d395de4a70da765bf6b241f0c5a6f439.png

方式二:开启Appium Desktop

打开Appium Desktop

62728cb65f692bf59db681faad204bea.png

如服务IP和端口默认的情况下,直接点击Start Server v1.8.0来开启Appium服务,如图所示。

8742676ef1d97997bfb1e96f7cf40af3.png

2、选中脚本鼠标右键Run,执行测试脚本。

脚本执行步骤:

(1)打开testApp.apk应用程序

(2)输入框输入百度首页

(3)点击GO

(4)关闭应用程序

e32b2c616d578c303728b6959fc8752d.png

第2章 IOS

2.1创建项目

1、启动PyCharm,创建My_Appium_Demo项目。创建demo包,之后创建脚本文件。例如:模拟器示例为IOS_App_Simulator,真机示例为IOS_App_RealMachine

如图所示:

a1e7d637675a1f0a8f1362a78fbdef54.png

2、打开项目解释器(PyCharm--->Preferences...--->Project:--->Project Interpreter),确保Appium-Python-Client包已经被项目引用。

c401ae1fccec7b5e906829d00f99bd5e.png

2.2编写脚本

2.2.1模拟器

1、使用Xcode创建模拟器,例如:本章示例模拟器名iPhone 8,IOS版本11.3。

35ae312dd047afe507a9f6bddfa43a52.png

2、关于测试的应用程序:

(1)如果是在模拟器上运行,需要装.app的应用程序文件。

要想在IOS模拟器中运行应用,则必须在Xcode中编译时选择模拟器类型,编译生成的文件后缀为.app

(2)如果是在真机上运行,需要装.ipa的应用程序文件。分为正式版和开发版。

正式版(已经发布到App Store上),可以直接在App Store上下载安装或者可以获取.ipa应用程序文件用命令安装到真机上。

开发版(没有发布到App Store上),只能获取.ipa应用程序文件,并且苹果开发者账号添加此真机的UDID,才可以用命令安装到此真机上。

3、本章示例使用的是模拟器,直接将.app应用程序拖拽到模拟器上进行安装即可。

4、在模拟器里测试应用程序,需要指定应用程序的bundleId,因为.app为测试版应用程序,所以bundleId可以询问开发人员提供。

例如:本章贝壳测试版应用bundleId为com.xiaoV.conchBeta。

# 被测应用的bundle ID
# 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
# 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
desired_caps['bundleId'] = 'com.xiaoV.conchBeta'

5、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Appium Desktop的Inspector工具查找元素。

首先打开Appium Desktop,点击Start Server v1.8.0来开启Appium服务。

a41ce830c9a43284cac0c1183c0184b3.png

点击放大镜(Start Inspector Session)。

e2b7461ffcfa98c5d74e5b6ad1bdcd5a.png

输入Desired Capabilities相关参数信息。例如:

{
  "platformName": "iOS",
  "platformVersion": "11.3",
  "deviceName": "iPhone 8",
  "automationName": "XCUITest",
  "bundleId": "com.xiaoV.conchBeta"
}

之后点击Start Session。

9016f947cd3ed66b23fcc99700da54f1.png

获取指定的元素信息。

2e194fd33938b81e2a4775a843268b72.png

6、脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from appium import webdriver
import time
"""
IOS-原生-模拟器
"""
# 定义启动设备需要的参数
desired_caps = {}

# 使用哪个自动化测试引擎
# 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
desired_caps['automationName'] = 'Appium'

# 使用哪个移动操作系统平台 iOS, Android, FirefoxOS
desired_caps['platformName'] = 'iOS'

# 移动操作系统版本
desired_caps['platformVersion'] = '11.3'

# 使用的移动设备或模拟器的类型
# iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4 等等
# 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
# 在Android上,这个关键字目前不起作用
desired_caps['deviceName'] = 'iPhone 8'

# 被测应用的bundle ID
# 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
# 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
desired_caps['bundleId'] = 'com.xiaoV.conchBeta'

# 在此会话之前不要重置应用程序状态
# Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
# IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
desired_caps['noReset'] = True

# 执行完整的重置
# Android 停止应用程序,清除应用程序数据并在测试后卸载apk
# IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
desired_caps['fullReset'] = False

# 设置命令超时时间,单位:秒
# 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
desired_caps['newCommandTimeout'] = 60

# 当IOS的个人信息访问警告(如:位置、联系人、图片)出现时,自动选择接受(Accept),默认值`false`
desired_caps['autoAcceptAlerts'] = False

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
print("启动贝壳应用程序")
time.sleep(5)

# 点击马上借钱
driver.find_element_by_name("马上借钱").click()

time.sleep(2)
driver.quit()

2.2.2真机

1、首先获取真机udid设备标识,终端输入 idevice_id -l

如图所示:显示该真机的udid信息。

1958deda39e6d5833c9360f73bf4ec48.png

2、关于测试的应用程序:

(1)如果是在模拟器上运行,需要装.app的应用程序文件。

要想在IOS模拟器中运行应用,则必须在Xcode中编译时选择模拟器类型,编译生成的文件后缀为.app

(2)如果是在真机上运行,需要装.ipa的应用程序文件。分为正式版和开发版。

正式版(已经发布到App Store上),可以直接在App Store上下载安装或者可以获取.ipa应用程序文件用命令安装到真机上。

开发版(没有发布到App Store上),只能获取.ipa应用程序文件,并且苹果开发者账号添加此真机的UDID,才可以用命令安装到此真机上。

3、本章示例使用的是真机,测试正式版微博应用(真机通过访问App Store下载微博应用安装即可)。

4、获取应用程序的bundleId,打开终端,输入 ideviceinstaller -l

如图所示:本章示例微博应用的bundleId为com.sina.weibo。

f079954329b22b88918cad473603a35d.png

# 被测应用的bundle ID
# 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
# 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
desired_caps['bundleId'] = 'com.sina.weibo'

5、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Appium Desktop的Inspector工具查找元素。

首先打开Appium Desktop,点击Start Server v1.8.0来开启Appium服务。

a41ce830c9a43284cac0c1183c0184b3.png

点击放大镜(Start Inspector Session)。

e2b7461ffcfa98c5d74e5b6ad1bdcd5a.png

输入Desired Capabilities相关参数信息。例如:

{
  "platformName": "iOS",
  "platformVersion": "11.1",
  "deviceName": "test",
  "automationName": "XCUITest",
  "bundleId": "com.sina.weibo",
  "udid": "c5dc675bddf7d1ac6d91783d5224d72b427f8d04"
}

之后点击Start Session。

d393019b3b848db1819176d553a2e10b.png

获取指定的元素信息。

c7c90969fb500376540fa5e0ecee2a62.png

6、脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from appium import webdriver
import time
"""
IOS-原生-真机
"""
# 定义启动设备需要的参数
desired_caps = {}

# 使用哪个自动化测试引擎
# 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
desired_caps['automationName'] = 'Appium'

# 使用哪个移动操作系统平台 iOS, Android, FirefoxOS
desired_caps['platformName'] = 'iOS'

# 移动操作系统版本
desired_caps['platformVersion'] = '11.1'

# 使用的移动设备或模拟器的类型
# iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4 等等
# 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
# 在Android上,这个关键字目前不起作用
desired_caps['deviceName'] = 'test'

# 连接的物理设备的唯一设备标识
desired_caps['udid'] = 'c5dc675bddf7d1ac6d91783d5224d72b427f8d04'

# 被测应用的bundle ID
# 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
# 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
desired_caps['bundleId'] = 'com.sina.weibo'

# 在此会话之前不要重置应用程序状态
# Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
# IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
desired_caps['noReset'] = True

# 执行完整的重置
# Android 停止应用程序,清除应用程序数据并在测试后卸载apk
# IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
desired_caps['fullReset'] = False

# 设置命令超时时间,单位:秒
# 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
desired_caps['newCommandTimeout'] = 60

# 当IOS的个人信息访问警告(如:位置、联系人、图片)出现时,自动选择接受(Accept),默认值`false`
desired_caps['autoAcceptAlerts'] = False

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
print("启动微博应用程序")
time.sleep(5)

# 点击发现
driver.find_element_by_name("发现").click()

time.sleep(5)
driver.quit()

2.3执行脚本

2.3.1模拟器

1、开启Appium服务(任选一种即可)

方式一:开启Appium Server

打开终端,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override

如图所示,Appium服务开启。

c5a47b9ff5f2091292e064582931a556.png

方式二:开启Appium Desktop

打开Appium Desktop

a41ce830c9a43284cac0c1183c0184b3.png

如服务IP和端口默认的情况下,直接点击Start Server v1.8.0来开启Appium服务,如图所示。

2284cc58fc286bc09a3d6703e29eaea6.png

2、选中脚本鼠标右键Run,执行测试脚本。

脚本执行时,Appium Desktop或Appium Server自动将WDA(WebDriverAgent)安装到模拟器上。

8cd8217f787df7da1eab6ff3e8784605.png

脚本执行步骤:

(1)打开贝壳应用程序

(2)点击马上借钱

(3)关闭贝壳应用程序

5543ee3e3223c3d7f5f372fc19f39b04.png

2.3.2真机

1、开启Appium服务(任选一种即可)

方式一:开启Appium Server

打开终端,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override

如图所示,Appium服务开启。

c5a47b9ff5f2091292e064582931a556.png

方式二:开启Appium Desktop

打开Appium Desktop

a41ce830c9a43284cac0c1183c0184b3.png

如服务IP和端口默认的情况下,直接点击Start Server v1.8.0来开启Appium服务,如图所示。

2284cc58fc286bc09a3d6703e29eaea6.png

2、选中脚本鼠标右键Run,执行测试脚本。

脚本执行步骤:

(1)打开微博应用程序

(2)点击发现

(3)关闭微博应用程序

03fa9f5b9dd05270b656d76a932e2be6.png

如果您觉得文章还不错,请大家 点赞、分享 下,因为这将是我持续输出更多优质文章的最强动力!

扫码关注

获取更多精彩

AllTests

5b6a49e8b8dbd3b0cbf795c97dd9e7ec.png b383d384af722fa78e017b406bc065a5.png

- End -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值