在pycharm中通过Python(python-client)编写了一个appium自动化脚本并执行
deviceName’‘127.0.0.162001’,#设备名称。如果是真机,一般在’设置->关于手机->设备名称’里查看。id定位可以看到id为io.appium.android.apisid/tasklist_finished。‘appPackage’‘io.appium.android.apis’,#apk的包名。‘appActivity’‘.ApiDemos’#activity名称}{‘
• 工作原理
• 例如:
当我在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
在终端输入 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()
结果如下
滑动
博主这里有张图 希望大家可以理解理解
左边x小右边x大上面y小下面y大
1.如果非要使用xpath定位的的话
我们可以写成
driver.find_element(AppiumBy.XPATH,"//android.widget.LinearLayout[2]").click()
把前面的去掉 换成//就可定位了
2、有时弹出,有时不弹出的 框如何判断。
在我们 连接打开过程中 可能模拟器 会弹出一个框 会时不时出现’
这时候我们要写个判断 如果他出来 就点 不出来就不点 这样就不会报错 从而阻止下一步运行
if driver.find_elements(AppiumBy.ID,"com.youdao.note:id/btn_cancel")
driver.find_element(AppiumBy.ID,"com.youdao.note:id/btn_cancel").click()
括号里表示可能会出现的元素
Ⅲ.拖拽元素
1.点击 views 再点击 Drag and Drop 把一号红色球球 拖拽到三号红色球球里
我们首先要知道 一号 和三号的 元素定位
2 进行拖拽
#拖拽的开头元素
ele_source=driver.find_element(AppiumBy.ID,"io.appium.android.apis:id/drag_dot_1")
#拖拽结尾的元素
ele_target=driver.find_element(AppiumBy.ID,"io.appium.android.apis:id/drag_dot_3")
TouchAction(driver).long_press(ele_source).move_to(ele_target).wait(500).release().perform()
定义两个引用ele_source和ele_target
把第一个引用 拖拽到第二个引用 移动500
代码如下
import time
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.touch_action import TouchAction
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)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Views").click()
time.sleep(2)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Drag and Drop").click()
time.sleep(2)
#拖拽的开头元素
ele_source=driver.find_element(AppiumBy.ID,"io.appium.android.apis:id/drag_dot_1")
#拖拽结尾的元素
ele_target=driver.find_element(AppiumBy.ID,"io.appium.android.apis:id/drag_dot_3")
TouchAction(driver).long_press(ele_source).move_to(ele_target).wait(500).release().perform()
运行结果
本期内容 到这里 就结束啦
请大家多提提建议 看看博主有没有哪里 没写明白 或不正确的地方
更多推荐
所有评论(0)