appium之基于Python实现自动化测试实战(Android)

#!/usr/bin/python
# encoding:utf-8

import os
import time
import unittest
from appium import webdriver
#添加这个可以自动生成测试报告
# import HTMLTestRunner

desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['appPackage'] = '包名'
desired_caps['appActivity'] = 'activity名,可以通过appium的inspection找到该名称'
#超时时间
desired_caps['newCommandTimeout'] = '100'
desired_caps['app'] = 'apk包存放地址'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

class  tjTeacher(unittest.TestCase):
    #登陆
    def loginTest(self):
        time.sleep(3) 
        pwlogin_btn = driver.find_element_by_id('bt_pwdlogin').click()
        phone_number = driver.find_element_by_id('phone_number_edit_text')
        phone_number.click()
        phone_number.send_keys('15102001212')
        password = driver.find_element_by_id('pwd_edit_text')
        password.click()
        password.send_keys('1111aaa')
        driver.find_element_by_id('login_btn').click()
        #设置隐式等待时间
        driver.implicitly_wait(3)
        if self.isElement('id', 'close_btn_iv') is True:
            driver.find_element_by_id('close_btn_iv').click()
            driver.find_element_by_id('close_btn_iv').click()
            driver.find_element_by_id('tab_message_tv').click()     
    #发消息
    def  messageTest(self):     driver.find_element_by_id('tab_message_tv').click()
driver.find_element_by_id('group_chat_lyt').click()
        driver.find_element_by_id('circle').click()
        #元素不好定位时,可以通过此方式定位到
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"小明\")').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"小红\")').click()
        driver.find_element_by_id('recive_sel_ok').click()

        txt = driver.find_element_by_id('msg_send_edit')
        txt.click()
        txt.send_keys('123')
        driver.find_element_by_id('msg_send_btn').click()
        #显式等待
        time.sleep(2)
        driver.find_element_by_id('msg_action_btn').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"相册\")').click()
        # driver.find_element_by_android_uiautomator('new UiSelector().text(\"最近\")').click()
        time.sleep(2)
        driver.find_element_by_xpath('//android.widget.FrameLayout[3]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ImageView[1]').click()
        time.sleep(2)

        driver.find_element_by_id('msg_switch_btn').click()
        action = TouchAction(driver)
        el = driver.find_element_by_id('msg_record_btn')
        action.long_press(el).wait(10000).perform()
        driver.find_element_by_id('audio_record_preview_right_btn').click()

        driver.find_element_by_id('left_btn').click()
        driver.find_element_by_id('left_btn').click()
        driver.find_element_by_id('btn_ok').click()
        driver.find_element_by_id('left_btn').click()
        time.sleep(3)

    def informTest(self):
        driver.find_element_by_id('send_notification_lyt').click()
        driver.find_element_by_id('right_btn').click()
        time.sleep(2)
        driver.find_element_by_id('school_name').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"全校老师(0/50)\")').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"小明老师\")').click()
        time.sleep(1)
        #模拟手机中,上下滑动操作
        driver.swipe(700,1275,700,160,300)
        driver.swipe(700,1275,700,160,300)
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"班级(0/11)\")').click()
        time.sleep(1)
        driver.swipe(700,1275,700,160,250)
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"一年级测试一班(0/1)\")').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"小丽家长测试一号\")').click()
        driver.find_element_by_id('tip_message_tv').click()
        txt = driver.find_element_by_id('msg_content_edittext')
        txt.click()
        txt.send_keys('123')
        driver.find_element_by_id('thumbnailIv').click()
        #控件无论通过元素还是uiselector都定位不到时,可以使用此方法
        x = driver.get_window_size()['width']
        y = driver.get_window_size()['height']
        driver.tap([(x*0.2,y*0.9)])
        time.sleep(2)
        driver.find_element_by_xpath('//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]/android.widget.ImageView[contains(@index,0)]').click()
        time.sleep(2)
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[1]').click()
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[3]').click()
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[5]').click()
        time.sleep(2)
        driver.find_element_by_id('photo_sel_ok').click()
        driver.find_element_by_id('right_btn').click()
        time.sleep(2)
        driver.find_element_by_id('left_btn').click()
        time.sleep(3)

    def homewrokTest(self):
        driver.find_element_by_id('iv_homework_icon').click()
        driver.find_element_by_id('right_btn').click()
        driver.find_element_by_id('school_name').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"一年级测试一班(0/1)\")').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"家长测试一号\")').click()
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"一年级一班(0/10)\")').click()
        driver.swipe(700,1275,700,160,300)
        driver.find_element_by_android_uiautomator('new UiSelector().text(\"小红\")').click()
        driver.find_element_by_id('tip_message_tv').click()
        time.sleep(2)
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.TextView[3]').click()
        driver.find_element_by_id('thumbnailIv').click()
        x = driver.get_window_size()['width']
        y = driver.get_window_size()['height']
        driver.tap([(x*0.2,y*0.9)])
        time.sleep(2)
        driver.find_element_by_xpath('//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]/android.widget.ImageView[contains(@index,0)]').click()
        time.sleep(2)
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[1]').click()
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[5]').click()
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[7]').click()
        time.sleep(2)
        driver.find_element_by_id('photo_sel_ok').click()
        txt = driver.find_element_by_id('msg_content_edittext')
        txt.click()
        txt.send_keys('123')

        driver.find_element_by_id('right_btn').click()
        time.sleep(2)
        driver.find_element_by_id('left_btn').click()

    def homeTest(self):
        self.driver.find_element_by_id('tab_home_tv').click()



    def foundTest(self):
        #这里也可以使用while循环来实现,while比for感觉更合适
        for i in xrange(1,100):
            time.sleep(10*i)
            tb = driver.find_element_by_id('tab_found_tv')
            if tb is not None:
                tb.click()
                break

        for i in xrange(1,1000):
            driver.implicitly_wait(10*i)
            tmp = driver.find_element_by_id('school_icon')
            if tmp is not None:
                tmp.click()
                break

        driver.find_element_by_id('right_btn').click()
        txt = driver.find_element_by_id('et_content')
        txt.click()
        txt.send_keys('123')
        driver.find_element_by_id('thumbnailIv').click()
        x = driver.get_window_size()['width']
        y = driver.get_window_size()['height']
        driver.tap([(x*0.2,y*0.9)])
        driver.find_element_by_xpath('//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]/android.widget.ImageView[contains(@index,0)]').click()
        time.sleep(2)
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[2]').click()
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[4]').click()
        driver.find_element_by_xpath('//android.widget.GridView[1]/android.widget.FrameLayout[9]').click()
        time.sleep(2)
        driver.find_element_by_id('photo_sel_ok').click()
        time.sleep(2)
        driver.find_element_by_id('right_btn').click()
        tmp_click = driver.find_element_by_id('rl_like')
        tmp_click.click()
        tmp_attribute = tmp_click.get_attribute('clickable')
        print 'tmp_attribute %s' % tmp_attribute

        driver.find_element_by_id('tv_comment').click()
        tmp_comment = driver.find_element_by_id('input_ed')
        tmp_comment.click()
        tmp_comment.send_keys('hhh')
        driver.find_element_by_id('tv_send').click()
        driver.implicitly_wait(3)
        driver.find_element_by_id('left_btn').click()
        driver.find_element_by_id('tv_delete').click()
        driver.find_element_by_id('btn_ok').click()
        driver.find_element_by_id('left_btn').click()
        print '22222222'

        # driver.find_element_by_id('class_icon').click()

    def classTest(self):
        for i in xrange(1,1000):
            driver.implicitly_wait(i*10)
            tmp_classbtn = driver.find_element_by_id('tab_class_tv')
            if tmp_classbtn is not None:
                tmp_classbtn.click()
                break

        driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains(\"妈妈帮手\")').click()
        driver.find_element_by_id('left_btn').click()


    def loginOutTest(self):
        time.sleep(3)
        driver.find_element_by_id('tab_config_tv').click()
        driver.find_element_by_id('right_btn').click()
        driver.find_element_by_id('setting_exit_btn').click()
        driver.find_element_by_id('btn_ok').click()


    # 网上找的,在判断一个元素是否找到时会报错的解决方案
    def isElement(self,identifyBy,c):
        ''' 
        Determine whether elements exist
        Usage:
        isElement(By.XPATH,"//a")
        '''


        time.sleep(1)
        flag=None
        try:
            if identifyBy == "id":
            #self.driver.implicitly_wait(60)
                driver.find_element_by_id(c)
            elif identifyBy == "xpath":
            #self.driver.implicitly_wait(60)
                driver.find_element_by_xpath(c)
            elif identifyBy == "class":
                driver.find_element_by_class_name(c)
            elif identifyBy == "link text":
                driver.find_element_by_link_text(c)
            elif identifyBy == "partial link text":
                driver.find_element_by_partial_link_text(c)
            elif identifyBy == "name":
                driver.find_element_by_name(c)
            elif identifyBy == "tag name":
                driver.find_element_by_tag_name(c)
            elif identifyBy == "css selector":
                driver.find_element_by_css_selector(c)
            flag = True
        except NoSuchElementException,e:
            flag = False
        finally:
            return flag


    # def teardown():
    #   self.driver.quit()


if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(tjTeacher('loginTest'))
    # suite.addTest(tjTeacher('messageTest'))
    # suite.addTest(tjTeacher('informTest'))
    # suite.addTest(tjTeacher('homewrokTest'))
    # suite.addTest(tjTeacher('foundTest'))
    # suite.addTest(tjTeacher('classTest'))
    suite.addTest(tjTeacher('loginOutTest'))

    runner = unittest.TextTestRunner()
    runner.run(suite)


  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值