赞
踩
• 工作原理
• 例如:
当我在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…,)。
在终端输入 pip install Appium-Python-Client 安装
在输入 pip show appium-python-client 查看是否安装成功
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 后面的值 双击 就可以复制它
代码如下 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大
我们可以写成
driver.find_element(AppiumBy.XPATH,"//android.widget.LinearLayout[2]").click()
把前面的去掉 换成//就可定位了
在我们 连接打开过程中 可能模拟器 会弹出一个框 会时不时出现’
这时候我们要写个判断 如果他出来 就点 不出来就不点 这样就不会报错 从而阻止下一步运行
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()
运行结果
本期内容 到这里 就结束啦
请大家多提提建议 看看博主有没有哪里 没写明白 或不正确的地方
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。