1. 程式人生 > >Python Appium 開啟Android測試之路

Python Appium 開啟Android測試之路

ppp encoding dev aps 發出 cli 進行 utf8 androi

1、獲取 Android app的Activity

打開終端cmd,先cd進入到剛才下載的“新浪.apk”目錄下,然後使用aapt dump badging xxx.apk命令獲取包內信息。註意,啟動類名稱一個字母都不能錯。

aapt dump badging 新浪.apk cat>d:/log.txt 這樣可以將信息指定到某一文件下然後 查看

技術分享

2、啟動微博

#-*-coding:utf-8-*-
#Time:2017/7/20 18:06
#Author:YangYangJun
import time
from appium import
webdriver desired_caps = {} desired_caps[platformName] = Android desired_caps[platformVersion] = 6.0 desired_caps[deviceName] = N79SIV5PVCSODAQC desired_caps[appPackage] = com.sina.weibo desired_caps[appActivity] = com.sina.weibo.SplashActivity driver = webdriver.Remote(http://localhost:4723/wd/hub
, desired_caps) driver.implicitly_wait(5) time.sleep(3) driver.quit()

3、元素定位

3.1、appium的webdriver提供了11種元素定位的方法,在selenium的基礎上擴展了三個,可以在pycharm裏面輸入driver.find_element_by然後會自動匹配出來 技術分享 多的三個:
driver.find_element_by_accessibility_id()
driver.find_element_by_android_uiautomator()
driver.find_element_by_ios_uiautomation()
(第三個是ios的專用的)

3.2、下面一一舉例進行 介紹

3.2.1、元素定位本篇主要介紹如何使用uiautomatorviewer,通過定位到頁面上的元素,然後進行相應的點擊等操作.

uiautomatorviewer是android-sdk自帶的一個元素定位工具,非常簡單好用,使用uiautomatorviewer,你可以檢查一個應用的UI來查看應用的布局和組件以及相關的屬性。

啟動uiautomatorviewer.bat

打開目錄D:\SProgram\Sdk\tools

技術分享

雙擊啟動,啟動之後出現如下界面

技術分享

如果不喜歡雙擊啟動的話,也可以在cmd裏面通過指令啟動

先cd到tools目錄下,然後輸入uiautomatorviewer.bat回車後啟動服務

3.2.1、find_element_by_accessibility_id

driver.find_element_by_accessibility_id(u"我的").click()

技術分享

3.2.2、通過id定位元素
resrouce-id屬性是id:
driver.find_element_by_id(‘username‘) 技術分享

3.2.3、通過name定位元素
text屬性是name

driver.find_element_by_name(‘password‘)

技術分享

4、結合公司剛開發出來的app,進行項目實訓
#-*-coding:utf-8-*-
#Time:2017/7/21 16:32
#Author:YangYangJun


import time
import unittest

from appium import webdriver

import sys
reload(sys)
sys.setdefaultencoding(utf8)


class Login(unittest.TestCase):

    def setUp(self):
        self.desired_caps = {}

        self.desired_caps[platformName] = Android
        self.desired_caps[platformVersion] = 6.0
        self.desired_caps[deviceName] = N79SIV5PVCSODAQC
        self.desired_caps[appPackage] = com.xxxx.mrg
        self.desired_caps[appActivity] = com.uzmap.pkg.EntranceActivity
        #隱藏鍵盤
        self.desired_caps[unicodeKeyboard] = True
        self.desired_caps[resetKeyboard] = True

        self.driver = webdriver.Remote(http://localhost:4723/wd/hub, self.desired_caps)
        #self.driver.implicitly_wait(15)



    #測試異常登錄-用戶不存在

    def test_aNoUserLogin(self):

        driver  = self.driver
        time.sleep(5)
        driver.find_element_by_accessibility_id(u"我的").click()

        time.sleep(5)

        driver.find_element_by_accessibility_id(u"登錄/註冊").click()
        time.sleep(2)

        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("username")).clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("username")).send_keys(xzbuyer1)
        time.sleep(2)

        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("password")).clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("password")).send_keys(111111)

        time.sleep(2)

        driver.find_element_by_accessibility_id(u"登錄").click()
        time.sleep(18)

        get_alertMessage = driver.find_elements_by_android_uiautomator(new Uiselector().resourceId("android:id/message")).get_attribute(name)
        time.sleep(2)
        if get_alertMessage == u用戶不存在:
            print u"用戶不存在,用例執行成功!"
        else:
            print u"用例執行失敗!"


    def test_bNoPassLogin(self):

        driver  = self.driver
        time.sleep(5)
        driver.find_element_by_accessibility_id(u"我的").click()

        time.sleep(5)

        driver.find_element_by_accessibility_id(u"登錄/註冊").click()
        time.sleep(2)

        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("username")).clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("username")).send_keys(xzbuyer)
        time.sleep(2)

        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("password")).clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("password")).send_keys(1111112)

        time.sleep(2)

        driver.find_element_by_accessibility_id(u"登錄").click()
        time.sleep(18)

        get_alertMessage = driver.find_elements_by_android_uiautomator(new Uiselector().resourceId("android:id/message")).get_attribute(name)
        time.sleep(2)
        print get_alertMessage[0:5]

        # if get_alertMessage == u‘用戶不存在‘:
        #     print u"用戶不存在,用例執行成功!"
        # else:
        #     print u"用例執行失敗!"
        #

    # 測試正常登錄

    def test_cLogin(self):

        driver = self.driver
        time.sleep(5)
        driver.find_element_by_accessibility_id(u"我的").click()

        time.sleep(5)

        driver.find_element_by_accessibility_id(u"登錄/註冊").click()
        time.sleep(2)

        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("username")).clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("username")).send_keys(xzbuyer)
        time.sleep(2)

        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("password")).clear()

        time.sleep(2)
        driver.find_element_by_android_uiautomator(new UiSelector().resourceId("password")).send_keys(111111)

        time.sleep(2)

        driver.find_element_by_accessibility_id(u"登錄").click()
        time.sleep(2)

        # 判斷是否登錄成功

        print driver.find_element_by_accessibility_id(u"西藏醫藥銷售有限公司").get_attribute(name)

        nickName = driver.find_element_by_accessibility_id(u"西藏醫藥銷售有限公司").get_attribute(name)
        temp = nickName[0:2]
        print  temp
        if nickName == u西藏醫藥銷售有限公司:
            print 登錄成功!

        else:
            print 登錄失敗!

    def tearDown(self):
        self.driver.close_app()
        self.driver.quit()



if __name__ == "__main__":
    unittest.main()

Python Appium 開啟Android測試之路