app自动化测试----基础入门appium初使用(UI自动化)

1.说明

   前提:app自动化环境搭建----Windows系统搭建  已搭建完成

   appium官方文档:https://appium.io/docs/en/about-appium/getting-started/?lang=zh

2.创建项目(连接手机)

python appium 官方地址:https://pypi.org/project/Appium-Python-Client/

# 安装 python appium 包
pip install Appium-Python-Client   # windows系统执行命令
pip install Appium-Python-Client   # mac系统执行命令

项目结果:

# main.py 文件
import os
from appium import webdriver

# 获取apk在项目中的存放地址
apk = os.path.join(os.path.dirname(os.path.abspath(__file__)),'apk/app-release-fanmao-cnode.apk')

desired_caps = {
    'platformName':'Android',          # 测试Android系统
    'platformVersion':'7.1.2',         # Android版本 可以在已连接手机 设置->关于手机 中查看
    'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已连接的设备
    'automationName':'UiAutomator2',   # 自动化引擎(默认UiAutomator2即可)
    'app':apk                          # app 文件路径(当前方式,每次运行项目,app都会重新安装一次)
}

# 创建 webdriver 实例 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_capabilities=desired_caps)

第一步:启动 appium server

需要注意的是:使用手机测试的话,启动appium 的时候需要在手机上安装 appium setting 有些手机有安全选项 需要手动去确认一下。

第二步:在pycharm中执行代码

如果是在模拟器中执行,会先安装appium setting(有,则跳过这一步),再安装我们测试的apk,然后打开apk(打开成功,则连接手机通过,才可以继续编写我们的代码)

执行完成后,可以关闭appiu(Ctrl+c 即可以关闭)

3.自动化登录app

 (1)找到自己的adb安装路径

 找到 app 定位工具

(2)在模拟器或者连接的真机中,打开app里面我们需要定位的页面,再打开uiautomatorviewer.bat

 

(3)元素定位----xpath 定位

//class的值[@属性及其对应的值] /下面的元素class值

//android.view.ViewGroup[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton

# main.py 文件
import os
import time
from appium import webdriver

# 获取apk在项目中的存放地址
apk = os.path.join(os.path.dirname(os.path.abspath(__file__)),'apk/app-release-fanmao-cnode.apk')

desired_caps = {
    'platformName':'Android',          # 测试Android系统
    'platformVersion':'7.1.2',         # Android版本 可以在已连接手机 设置->关于手机 中查看
    'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已连接的设备
    'automationName':'UiAutomator2',   # 自动化引擎(默认UiAutomator2即可)
    'app':apk                          # app 文件路径(当前方式,每次运行项目,app都会重新安装一次)
 } 

# 创建 webdriver 实例 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_capabilities=desired_caps) time.sleep(5)

# 点击登录
login_image_btn = '//android.view.ViewGroup[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton' driver.find_element_by_xpath(login_image_btn).click()
time.sleep(
1)
click_login_name
= 'org.cnodejs.android.md:id/tv_login_name'
driver.find_element_by_id(click_login_name).click() time.sleep(
1)

# 输入登录的token http://47.100.175.62:3000/
driver.find_element_by_id('org.cnodejs.android.md:id/edt_access_token').send_keys("83dc9ad3-f0e1-4cf3-a0de-d82a3508f79d")

# 点击登录
driver.find_element_by_id('org.cnodejs.android.md:id/btn_login').click()

第一步:启动 appium server

需要注意的是:使用手机测试的话,启动appium 的时候需要在手机上安装 appium setting 有些手机有安全选项 需要手动去确认一下。

第二步:关闭 uiautomatorviewer.bat 元素定位工具

第二步:在pycharm中执行代码

4.元素定位

(1)Xpath定位

        //class的值[@属性及其对应的值] /下面的元素class值

        //android.view.ViewGroup[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton

(2)and 并且多个属性来定位

      //*[@text="登录" and @resource-id="org.cnodejs.android.md:id/btn_login"]

(3)子元素定位,先找到父元素,再找到子元素,[2] 表示第二个子元素

      //*[@resource-id="org.cnodejs.android.md:id/recycler_view"]/android.widget.LinearLayout[2]

(4)xpath text 文本值定位

        //*[@text="点击头像登录"]

    

5.自动化发微博

    5.1 先在模拟器上面下载并安装 微博App (使用模拟器/真机都可以),安装完成并登陆后,获取包名,启动页名称

          打开cmd,运行命令

         

       打开模拟器中的微博,查看日志

      

     packageName:com.sina.weibo        activityName.SplashActivity

   5.2 连接模拟器获取自动化代码

   启动 appium桌面客户端

 

    在新的窗口中添加连接配置

   

{
    "platformName":"Android",          # 测试Android系统
    "platformVersion":"7.1.2",         # Android版本 可以在已连接手机 设置->关于手机 中查看
    "deviceName":"127.0.0.1:62001",    # cmd中使用 adb devices 命令查看已连接的设备
    "automationName":"UiAutomator2"    # 自动化引擎(默认UiAutomator2即可)
}


# 可直接复制到JSON Representation
{
  "platformName": "Android",
  "platformVersion": "7.1.2",
  "deviceName": "127.0.0.1:62001",
  "automationName": "UiAutomator2"
}

 ps:上传图片好麻烦啊~~~(注意,需要先下载几张图片在手机相册中)

from appium import webdriver
import time

from appium.webdriver.common.touch_action import TouchAction

desired_caps = {
    'platformName':'Android',          # 测试Android系统
    'platformVersion':'7.1.2',         # Android版本 可以在已连接手机 设置->关于手机 中查看
    'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已连接的设备
    'automationName':'UiAutomator2',   # 自动化引擎(默认UiAutomator2即可)
    'noReset': True,                   # 不要重置app的状态(比如,已经登陆的app,我们运行项目的时候保留之前的状态)
    'fullReset': False,                # 不要清理app的缓存数据(比如,已经登陆的app,我们运行项目的时候保留之前的状态)
    'appPackage':"com.sina.weibo",     # 应用的包名(打开对应包名的app)
    'appActivity': ".SplashActivity"   # 应用的活动页名称
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capabilities=desired_caps)
time.sleep(15)

el1 = driver.find_element_by_id("com.sina.weibo:id/rightBtn_wrapper")
el1.click()
time.sleep(2)
el2 = driver.find_element_by_accessibility_id("写微博")
el2.click()
# 等待发微博页面加载成功
time.sleep(3)
el3 = driver.find_element_by_id("com.sina.weibo:id/edit_view")
el3.send_keys("Hi 今天天气真好啊")

driver.find_element_by_accessibility_id("插入图片").click()
time.sleep(3)
# 选择图片(抓取不到,所以需要自己去写)
xpath_img1 = '//*[@resource-id="com.sina.weibo:id/photo_album_gridview"]/android.widget.RelativeLayout[2]'
xpath_img2 = '//*[@resource-id="com.sina.weibo:id/photo_album_gridview"]/android.widget.RelativeLayout[3]'
driver.find_element_by_xpath(xpath_img1).click()
time.sleep(2)
# 选中
driver.find_element_by_id('com.sina.weibo:id/btn_num_check').click()
# 返回上一层
driver.back()
time.sleep(2)
driver.find_element_by_xpath(xpath_img2).click()
time.sleep(1)
driver.find_element_by_id('com.sina.weibo:id/btn_num_check').click()
# 点击下一步
driver.find_element_by_id('com.sina.weibo:id/btn_confirm_edit').click()
time.sleep(1)
driver.find_element_by_id('com.sina.weibo:id/btn_confirm_edit').click()
time.sleep(1)


el4 = driver.find_element_by_accessibility_id("发送")
el4.click()
# 刷新微博
time.sleep(3)
TouchAction(driver).press(x=390, y=200).move_to(x=390, y=1323).release().perform()

# driver.quit()

        

原文地址:https://www.cnblogs.com/Z-Queen/p/14855826.html