python+appium

#案例:python+appium的一个复杂案例!
from appium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from appiumUtils import click_select
from appiumUtils import  caozuoEleNotScreen


# server 启动参数
desired_caps = {}
# 设备信息
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
# 指定要操作某app的某UI
desired_caps['appPackage'] = 'com.android.contacts'
desired_caps['appActivity'] = '.activities.PeopleActivity'
desired_caps['noReset']=True

#指定Appium服务器的ip和端口
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

#定位元素“+”,并点击
driver.find_element_by_id("com.android.contacts:id/floating_action_button").click()

time.sleep(3)
#定位元素“姓名”,并输入
driver.find_element_by_xpath("//*[@text='姓名']").send_keys("张三")

#定位元素“电话”,并输入
driver.find_element_by_xpath("//*[@text='电话']").send_keys("13760453683")
#定位元素下列列表“电话类型”,并点击,目的是为了让下列列表展开!
ele_select_phoneType=driver.find_element_by_xpath("//*[@text='手机']")
ele_select_phoneType.click()
#点击展开后的下列列表中的某选项
loc_select=By.CLASS_NAME,"android.widget.ListView"
loc_option=By.XPATH,"//*[@text='助理']"
click_select(driver,loc_select,loc_option)

time.sleep(3)
#定位元素“电子邮件”,并输入
driver.find_element_by_xpath("//*[@text='电子邮件']").send_keys("851286894@qq.com")

#选择“电子邮件”类型
driver.find_element_by_xpath("//*[@text='个人']").click()
loc_select1=By.CLASS_NAME,"android.widget.ListView"
loc_option1=By.XPATH,"//*[@text='工作']"
click_select(driver,loc_select1,loc_option1)

time.sleep(2)
#定位元素“地址”,并输入
loc_addr=By.XPATH,"//*[@text='地址']"
caozuoEleNotScreen(driver,loc_addr,dict="up",caozuoType="input",data="深圳市南山区XXX小区")


#定位元素“公司”,并输入
loc_company=By.XPATH,"//*[@text='公司']"
caozuoEleNotScreen(driver,loc_company,dict="up",caozuoType="input",data="深圳哇哈哈集团")

#定位元素“聊天软件号码”,并输入
loc_qqHaoma=By.XPATH,"//*[@text='聊天工具']"
caozuoEleNotScreen(driver,loc_qqHaoma,dict="up",caozuoType="input",data="851286894")

#选中“聊天软件”
loc_AIM=By.XPATH,"//*[@text='AIM']"
caozuoEleNotScreen(driver,loc_AIM,dict="up",caozuoType="click",data=None)
loc_select2=By.CLASS_NAME,"android.widget.ListView"
loc_option2=By.XPATH,"//*[@text='ICQ']"
click_select(driver,loc_select2,loc_option2)

#定位元素“网站”,并输入
loc_website=By.XPATH,"//*[@text='网站']"
caozuoEleNotScreen(driver,loc_website,dict="up",caozuoType="input",data="http://wahaha.com")

#定位元素“保存”按钮,并点击
driver.find_element_by_class_name("android.widget.ImageButton").click()

#断言:断言逻辑:保存后UI中用户名是"张三"
time.sleep(3)
ele_yonhumin=driver.find_element_by_id("com.android.contacts:id/large_title")
attr_text=ele_yonhumin.text
if attr_text=="张三":
    print("成功")
else:
    print("失败")


time.sleep(5) #休眠5秒
driver.quit()

工具类

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

#函数功能:滑动一次(滑动幅度:小0.5屏)!
#形参dict:String,表示滑动的方向。"up":上滑;"down":下滑。"left":左滑。"right":右滑!
def huadonOne(driver,dict="up"):
    w = driver.get_window_size()["width"]
    h = driver.get_window_size()["height"]
    if dict=="up":
        start_x = 0.5 * w
        start_y = 0.75 * h
        end_x = 0.5 * w
        end_y = 0.25 * h
        driver.swipe(start_x, start_y, end_x, end_y, duration=5000)
    elif dict=="down":
        start_x = 0.5 * w
        start_y = 0.25 * h
        end_x = 0.5 * w
        end_y = 0.75* h
        driver.swipe(start_x, start_y, end_x, end_y, duration=5000);
    elif dict=="left":
        start_x = 0.75 * w
        start_y = 0.5 * h
        end_x = 0.25 * w
        end_y = 0.5 * h
        driver.swipe(start_x, start_y, end_x, end_y, duration=5000);
    elif dict=="right":
        start_x = 0.25 * w
        start_y = 0.5 * h
        end_x = 0.75 * w
        end_y = 0.5 * h
        driver.swipe(start_x, start_y, end_x, end_y, duration=5000);


#函数功能:定位某元素,并操作该元素!
#形参loc:表示你要定位的元素的定位特征!
#形参dict:滑动方向!
#形参caozuoType:指定对该元素如何操作!
#形参data:如果是对该元素输入操作,data表示输入数据!
def caozuoEleNotScreen(driver,loc,dict="up",caozuoType="click",data=None):
    while True:
        try:
            ele= WebDriverWait(driver, 10, 1).until(lambda x: x.find_element(loc[0], loc[1]))
            if caozuoType=="click":
                ele.click()
            elif caozuoType=="input":
                ele.send_keys(data)
            break
        except Exception:
            # 上滑
            huadonOne(driver, dict)

#返回元素loc的w和h
def getEleWAndH(driver,loc):
    # 获取元素“展开后的下列列表”的bounds属性
    ele=WebDriverWait(driver, 5, 1).until(lambda x: x.find_element(loc[0], loc[1]))
    attr_bounds = ele.get_attribute("bounds")  # "[[108,144][333,806]]"
    a = attr_bounds.replace("[", "")
    b = a.replace("]", ",")
    c = b.split(",", 4)
    x1 = int(c[0])
    y1 = int(c[1])
    x2 = int(c[2])
    y2 = int(c[3])
    w=x2-x1
    h=y2-y1
    return {"width":w,"height":h}

#函数功能:点击下列列表中的某选项!
def click_select(driver,loc_select,loc_option):
    # 定位展开后的下列列表
    ele_select= WebDriverWait(driver, 5, 1).until(lambda x:x.find_element(loc_select[0],loc_select[1]));
    # 定位元素下列列表“电话类型”中的某选项,并点击
    while True:
        try:
            ele_xuanxian_phoneTypeele = WebDriverWait(driver, 3, 1).until(
                lambda x: x.find_element(loc_option[0],loc_option[1]))
            ele_xuanxian_phoneTypeele.click()
            break
        except Exception:
            # 上滑这个下列列表
            # 获取元素“展开后的下列列表”的bounds属性
            attr_bounds = ele_select.get_attribute("bounds")  # "[[108,144][333,806]]"
            a = attr_bounds.replace("[", "")
            b = a.replace("]", ",")
            c = b.split(",", 4)
            x1 = int(c[0])
            y1 = int(c[1])
            x2 = int(c[2])
            y2 = int(c[3])
            w = x2 - x1
            h = y2 - y1

            # 获取下列列表中滑动的起点和终点
            start_x = x1 + 0.5 * w
            start_y = y1 + 0.75 * h
            end_x = start_x
            end_y = y1 + 0.25 * h
            driver.swipe(start_x, start_y, end_x, end_y, duration=5000)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不多说废话,看题目,本教程适合练手,会python+android基础的人群,文件较大,上传乃是下载链接,下面上目录: 1-1 课程导学 2-1 如何学好Android App性能测试? 2-10 详解【电量】监控值的获取方法 \' D, l" p) d6 d. K9 [7 p 2-11 详解【电量】监控脚本实现和数据分析 O, e4 X& K0 S% h8 v8 V9 ? 2-12 详解【内存】监控值的获取方法 k! e6 e# C" K% z9 k- l 2-13 详解【内存】监控脚本实现和数据分析0 d; e- S% G6 r3 H: g 2-14 详解【FPS&过度渲染】的概念和监控方法 - 分析页面卡慢的方法# G! _2 O9 T* j" K s3 v6 C0 l 2-2 工欲善其事必先利其器-性能测试环境准备 2-3 详解【启动时间】监控值的获取方法0 n( p* l; g C 2-4 详解【启动时间】监控脚本实现% B2 z( C( E& S: n r1 e 2-5 详解【启动时间】数据分析 2-6 【启动时间】时间戳差值监控方法概要介绍 2-7 详解【CPU】监控值的获取方法、脚本实现和数据分析 2-8 详解【流量】监控值的获取方法7 r7 ~/ D5 |+ h9 m9 i6 p) b: Y 2-9 详解【流量】监控脚本实现和数据分析2 [9 {# {$ c9 k/ T, `/ t" \ 3-1 为什么需要使用框架实现自动化测试? 3-10 UnitTest框架之TestCase,TestSuite,TestRunner简介3 A2 {1 F2 @; K 3-11 UnitTest框架之TestSuite,TestRunner自动化测试 3-12 数据驱动框架DDT简介 3-13 数据驱动框架DDT的使用方法 3-14 数据驱动框架DDT实战; 3-2 准备一个被测APP 3-3 工欲善其事必先利其器-自动化测试环境准备 3-4 Android App自动化测试(一) 3-5 Android App自动化测试(二) 3-6 Android App自动化测试(三) 3-7 UnitTest框架之TestFixture简介 3-8 UnitTest框架之TestFixture自动化测试(一) 3-9 UnitTest框架之TestFixture自动化测试(二) 4-1 如何学好Android App API接口测试? 4-10 Fiddler构造HTTP Get请求 4-11 Fiddler构造HTTP Post请求 4-12 Fiddler抓取手机上的网络数据包 4-13 为什么使用PostMan做API接口测试 4-14 工欲善其事必先利其器-PostMan工具准备 4-15 PostMan测试HTTP Get请求 4-16 PostMan测试HTTP Post请求 4-17 数据驱动DDT实现API接口自动化测试简介) 4-18 Python requests测试HTTP中的Get、Post请求 4-19 数据驱动DDT实现API接口自动化测试(一) 4-2 什么是API 4-20 数据驱动DDT实现API接口自动化测试(二); 4-3 抓包神器Fiddler简介 4-4 Fiddler抓包原理解析 4-5 Fiddler修改客户端发出的请求(一) 4-6 Fiddler修改客户端发出的请求(二) 4-7 Fiddler修改服务器端返回的内容 4-8 Fiddler实现会话的过滤、对比及请求的编解码 4-9 Fiddler实现Host的配置 5-1 测试工程师为什么需要掌握持续集成? 5-2 持续集成的概念、流程和意义 5-3 讲解持续集成工具Jenkins3 5-4 Jenkins工具密码的修改 5-5 Jenkins工具的配置说明 5-6 Jenkins工具系统配置和Job配置 5-7 Jenkins工具手动持续集成实战 5-8 Jenkins工具自动化持续集成实战 6-1 Native App自动化测试及Appuim框架介绍 6-2 自动化测试环境、元素识别工具、脚本设计原则-LOVE原则的讲解 6-3 Native App自动化脚本的实现 6-4 Appium自动化测试框架API讲解与案例实践(一) 6-5 Appium自动化测试框架API讲解与案例实践(二) 6-6 Appium自动化测试框架API讲解与案例实践(三) 6-7 Appium自动化测试框架API讲解与案例实践(四) 6-8 Appium自动化测试框架API讲解与案例实践(五) 6-9 Appium自动化测试框架API讲解与案例实践(六) 7-1 Hybrid App自动化测试概要 7-2 Appium基于Sele

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值