当前位置:   article > 正文

在pycharm中通过Python(python-client)编写了一个appium自动化脚本并执行_pycharm 连接木木模拟器

pycharm 连接木木模拟器

• 工作原理
• 例如:
当我在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

在终端输入 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()
  • 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

可以看到已经成功啦
在这里插入图片描述
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

结果如下
在这里插入图片描述

滑动
博主这里有张图 希望大家可以理解理解
在这里插入图片描述
左边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
  • 2

括号里表示可能会出现的元素

Ⅲ.拖拽元素

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

定义两个引用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()
  • 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

运行结果

在这里插入图片描述
本期内容 到这里 就结束啦
请大家多提提建议 看看博主有没有哪里 没写明白 或不正确的地方

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/70505
推荐阅读
相关标签
  

闽ICP备14008679号