【Mac + Appium + Python3.6學習(二)】之Android自動化測試,appium-desktop配置和簡易自動化測試腳本

上一篇文章介紹安裝appium測試環境,這一片研究介紹如何測試Android自動化。html

上一篇地址:《【Mac + Appium學習(一)】之安裝Appium環境node

 這一篇參考:《Mac 下 appium 自動化測試 Android 測試配置和腳本編寫(四)python

配置環境:

  • Appium version :1.9.1
  • Appium-desktop:後改成1.7.1
  • Android:6.0.1
  • Mac:10.13.6

1、appium-desktop配置鏈接Android真機

一、開啓appium服務

 

若是報錯:參考上一篇解決辦法(第二節第6小點)android

二、配置鏈接真機的參數

 參數配置以下: 參考《Mac 下 appium 自動化測試 Android 測試配置和腳本編寫(四)web

其中,appPackage、appActivity如何獲取呢(有坑):shell

參考:《獲取app的 appPackage和appActivitysession

輸入以下:app

$ adb shell
shell@R9s:/ $ dumpsys activity | grep mFocusedActivity
  mFocusedActivity: ActivityRecord{f8dacd9 u0 cn.sqm.citymine_safety/.LoginActivity(這塊有問題,見下面) t64}

其中:cn.sqm.citymine_safety/.LoginActivity是咱們須要的ide

能夠點擊【Save As】進行保存post

 

而後點擊【Start Session】按鈕。

可是報錯:An unknown server-side error occurred while processing the command. Original error: Error occured while starting App. Original error: Permission to start activity denied.

經查詢得知是:appActivity這塊的問題

Error occured while starting App. Original error: Permission to start activity denied.錯誤的解決方法

解決以下,命令行輸入:

adb shell dumpsys activity activities >/Users/xxx/Desktop/activity.txt

打開文檔,以下:

 

三、檢查器

修改後再一次運行,會打開The Inspector:

檢查器是應用程序狀態的可視化表示具備在應用程序中執行某些交互的能力Appium。 

 

 

四、解決每次啓動時都安裝setting和unlock app方法

可是有一個問題是,之後每次啓動都要安裝setting和unlock app,爲了解決,以下:

關掉appium setting 和unlock自動安裝的方法*

==========================================================

下面兩個由於不是在appium-desktop下修改的,因此對本文不適。

 

①《MacBook Appium 禁止每次運行都會啓動appium setting 、appium unlock

 

②《appium解決每次運行都須要安裝Unlock以及AppiumSetting的問題

==========================================================

 

1)首先修改...lib/android-helpers.js文件

從網上找了不少修改的方法可是統一都在appium下的android-helpers.js修改,屢試不爽,通過查詢得知應該在appium-desktop下修改,多是由於我用的是這個軟件吧:

它的路徑爲:

# 修改android-helpers.js
open
/Applications/Project/Appium1.7.1.app/Contents/Resources/app/node_modules/appium/node_modules/appium-android-driver/lib

打開android-helpers.js文件

 ①搜索下面代碼後註釋掉:328行

await adb.install(unicodeIMEPath, false);

如圖:

②接着註釋掉下面兩行代碼:46九、472行

await helpers.pushSettingsApp(adb);

await helpers.pushUnlock(adb); 

這個文件就算改完了,保存並退出。

2)其次修改.../build/lib/android-helpers.js文件

# 修改android-helpers.js
open /Applications/Project/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-android-driver/build/lib/

①註釋掉代碼並在下一行添加一行代碼:89二、893行

// return _regeneratorRuntime.awrap(adb.install(_appiumAndroidIme.path, false));
return context$1$0.abrupt('return',defaultIME);

 ②接着註釋下面並添加一行:128七、1288行;129七、1298行

// return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb));
return context$1$0.abrupt('return',defaultIME);

// return _regeneratorRuntime.awrap(helpers.pushUnlock(adb));
return context$1$0.abrupt('return',defaultIME);

ok,保存而且退出。重啓appium-desktop便可。不會再無休止地讓你安裝Unlock和AppiumSetting了。

2、 Android自動化py腳本編寫

寫一下簡易的代碼以下:

desired_capabilities.py

def get_desired_capabilities():
    desired_caps = {
        "platformName": "Android",
        "platformVersion": "6.0.1",
        "deviceName": "OPPO",
        "appPackage": "cn.sqm.citymine_safety",
        "appActivity": ".activity.LauncherActivity",
        "udid": "608ad0fe"
    }
    return desired_caps

def get_uri():
    return 'http://localhost:4723/wd/hub'

test.py

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import  expected_conditions as EC
import unittest
import time
from time import sleep
import Mine.Appium.desired_capabilities as desired_capabilities
from selenium.webdriver.common.by import By



class AndroidTest(unittest.TestCase):


    @classmethod
    def setUpClass(self):
        desired_cap = desired_capabilities.get_desired_capabilities()
        uri = desired_capabilities.get_uri()
        self.d = webdriver.Remote(uri,desired_cap)


    @classmethod
    def tearDownClass(self):
        sleep(10)
        self.driver.quit()
        pass


    def setUp(self):
        print("=======start!=======")
        sleep(5)
        size = self.d.get_window_size()
        print(size)
        # 輸入用戶名
        userName = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/et_login_id")
        userName.send_keys("xxx")
        # 輸入密碼
        password = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/et_login_password")
        password.send_keys("xxx")
        # 登陸密碼
        button = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/btn_login")
        button.click()


    def tearDown(self):
        print("=======stop!=======")


    def test1(self):
        print("測試開始!")
        # 發起任務
        self.d.find_element_by_id("cn.sqm.citymine_safety:id/rl_add_task").click()
        # 任務類型
        self.d.find_element_by_id("cn.sqm.citymine_safety:id/tv_select_task_type").click()
        self.d.swipe(534, 1630, 534, 1583, 500)
        # 向上拖動
        self.d.swipe(500, 1270, 500, 500, 500)


        # 獲取值
        text = self.d.find_element_by_id("cn.sqm.citymine_safety:id/tv_get_location").text
        self.assertEqual(text,"公園1","定位不對!")


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

 

可是報錯:

selenium.common.exceptions.WebDriverException: Message: Parameters were incorrect. We wanted {"required":["value"]} and you sent ["text","value","id","sessionId"]

解決參考以下:

appium+webdriveragent+Python+真機/模擬器 app自動化測試

找到緣由是selenium版本的問題,把selenium版本降到3.0.1 就能夠了,執行命令以下:

# 查看命令:
pip show selenium //查看當前包的版本信息

# 卸載命令:
pip uninstall selenium //卸載當前安裝的包

# 安裝命令:
pip install selenium==3.0.1 //指定版本號安裝

# 查看命令:
pip show selenium //查看當前包的版本信息

可是再一次執行appium程序時又遇到以下報錯:

ImportError: cannot import name 'InvalidArgumentException'

參考解決以下:《執行appium程序時遇到以下報錯,ImportError: cannot import name 'InvalidArgumentException'

在此路徑下的exceptions.py文件中添加一段代碼:

/Users/xxx/.pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/common/exceptions.py

class InvalidArgumentException(WebDriverException):
    """
    """
    pass

再一次運行appium程序,自動化運行成功!!!! 

 

相關文章
相關標籤/搜索