工作原理
• 例如:
当我在MAC平台上,在pycharm中通过Python(python-client)编写了一个appium自动化脚本并执行,请求会首先到 appium.dmg(MAC下的appium-Server),appium-Server通过解析,驱动iOS,android设备来执行appium自动化脚本。
• 例如:
当windows10平台上,在pycharm中通过Python(python-appium-client)编写了一个appium自动化脚本并执行,请求会首先到 appium_sever,appium-Server通过解析(python—adb 命令),驱动android设备(mumu模拟器)来执行appium自动化脚本(adb命令,http…,)。

本期内容 使用pycharm 实现 appium自动化
一.打开pycharm 安装 Appium
二. 打开Appium 配置我们的 Api Demos 的连接json
三.侦测器的定位
四 pycharm 连接模拟器并尝试 使用id xpath 定位 来点击元素
Ⅰ.点击Accessibility 再点击Accessibility Node Querying 再勾选Conquer World
Ⅱ.选择搜素框并输入输入内容 取值 断言
2、有时弹出,有时不弹出的 框如何判断。
Ⅲ.拖拽元素
一.打开pycharm 安装 Appium
在终端输入 pip install Appium-Python-Client 安装
在输入 pip show appium-python-client 查看是否安装成功

二. 打开Appium 配置我们的 Api Demos 的连接json
Api Demos 在github
链接: 环境搭建
配置如下

json原理
{ ‘platformName’: ‘Android’, # 平台名称
‘platformVersion’: ‘5.1.1’, #系统版本号
‘deviceName’: ‘127.0.0.1:62001’, #设备名称。如果是真机,一般在’设置->关于手机->设备名称’里查看
‘appPackage’: ‘io.appium.android.apis’, # apk的包名
‘appActivity’: ‘.ApiDemos’ # activity 名称 }
可以看到会话启动成功了
三.侦测器的定位
侦测成功后 可以点击一个元素 右边就会 出来一个元素的信息
包含 id xpath 和text信息 可以通过 这些来进行定位
点击右边的ID 后面的值 双击 就可以复制它

四 pycharm 连接模拟器并尝试 使用id xpath 定位 来点击元素
Ⅰ.点击Accessibility 再点击Accessibility Node Querying 再勾选Conquer World
代码如下
import time
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
des_cap={
"platformName": "android",
"appium:deviceName": "127.0.0.1:7555",
"appium:appPackage": "io.appium.android.apis",
"appium:appActivity": ".ApiDemos",
"appium:unicodeKeyboard": True,
"appium:resetKeyboard": True,
"appium:autoGrantPermissions": True
}
# remote远程连接,appium_server:http://127.0.0.1:4723/wd/hub ,,模拟器手机连接参数desired_capabilities
driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_capabilities=des_cap)
#Accessibility
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Accessibility").click()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Accessibility Node Querying").click()
time.sleep(1)
#id定位
driver.find_elements(AppiumBy.ID,"io.appium.android.apis:id/tasklist_finished")[2].click()
time.sleep(2)
# 关闭所有程序
driver.quit()
可以看到已经成功啦
id定位 可以看到id为 io.appium.android.apis:id/tasklist_finished
但是我们选择的是第二个所有就可以用[2]来进行定位
可能有的人 就会好奇为什么不用xpath 因为xpath不够准确 而 ID是唯一
Ⅱ.选择搜素框并输入输入内容 取值 断言
1.点击Views然后从下往上滑动 点击Search View再点击Filter定位上面的输入框 输入Ack
import time
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
des_cap={
"platformName": "android",
"appium:deviceName": "127.0.0.1:7555",
"appium:appPackage": "io.appium.android.apis",
"appium:appActivity": ".ApiDemos",
"appium:unicodeKeyboard": True,
"appium:resetKeyboard": True,
"appium:autoGrantPermissions": True
}
# remote远程连接,appium_server:http://127.0.0.1:4723/wd/hub ,,模拟器手机连接参数desired_capabilities
driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_capabilities=des_cap)
#Accessibility
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Views").click()
#
#从哪个元素滑动到目标元素出现位置
# 滑动别人脚本在我这里不好用,兼容性好
# 获得屏幕大小,在屏幕下面10分之一地方,滑动到 上面10分之九,再滑动一下。
# 从哪个元素滑动到目标元素出现为止。是否有这样的方法,Actionchain链式操作。
# driver.swipe(670,1222,670,347)
size=driver.get_window_size()
width=size['width']
height=size['height']
# 从下往上划
driver.swipe(width/2,height*9/10,width/2,height/10,500)
driver.swipe(width/2,height*9/10,width/2,height/10,500)
time.sleep(1)
#点击Search View
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Search View").click()
time.sleep(1)
# 点击 Filter
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Filter").click()
#输入值
driver.find_element(AppiumBy.ID,"android:id/search_src_text").send_keys("Ack")
time.sleep(1)
#输出
print(driver.find_element(AppiumBy.ID,"android:id/text1").text)
print(driver.find_element(AppiumBy.ID,"android:id/text1").get_attribute("text"))
#断言
assert "Ack" in driver.find_element(AppiumBy.ID,"android:id/text1").get_attribute("text")
time.sleep(2)
driver.quit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
结果如下
滑动
博主这里有张图 希望大家可以理解理解