最近在解決歷史遺留問題-彈窗,也是感觸頗多。以前由於趕項目,就把彈窗問題的優先級下降了,如今到了多設備(幾十臺)並行執行,彈窗問題就變成了當務之急了。那麼,先看看彈窗類型:安裝彈窗、系統彈窗、應用內部彈窗。通常來講須要處理的是這三種類型的彈窗。python
在安裝彈窗中須要處理的有:1.Appium默認安裝的apk彈窗,2.安裝被測應用時出現的彈窗。如何處理這類型的彈窗?咱們的處理方法是交給UI框架去處理。android
def install_unlock_apk(device,useless): # the unlock_apk path unlock_apk_path = the_path + os.path.join(os.path.sep, "TEST", "bin", "unlock_apk-debug.apk") packageList = [] packages = os.popen('adb -s {0} shell pm list packages'.format(device)) for package in packages: packageName = package.split(':')[-1].splitlines()[0] packageList.append(packageName) if 'io.appium.unlock' not in packageList: os.popen('adb -s {0} install {1}'.format(device, unlock_apk_path))
def protect(device,useless): path_to_jar = the_path + os.path.join(os.path.sep,"TEST","data","xiaomiJar.jar") os.popen('adb -s {0} push {1} /data/local/tmp' .format(device, path_to_jar)) os.popen('adb -s {0} shell uiautomator runtest xiaomiJar.jar --nohup -c com.ppmoney.testcases.InstallButtonClicker' .format(device))
install_unlock_apk = threading.Thread(target=install_unlock_apk, args=(device, "")) protect1 = threading.Thread(target=protect, args=(device, ""))
備註:這裏須要用到jar包,這個jar包是具體的處理彈窗的方法。因爲python沒有自帶的uiautomator庫,因此用回Java去處理,總得來講,彈窗是由uiautomator去處理。shell
install = threading.Thread(target=install_apk, args=(device, apk)) protect3 = threading.Thread(target=protect, args=(device, ""))
系統彈窗:啓動應用時,出現的權限彈窗。處理方式:啓動應用以後,去判斷彈窗是否存在,若是存在就點擊,不存在就開始執行用例。windows
def click_shoot_windows(self): try: els = self.driver.find_elements_by_class_name('android.widget.Button') for el in els: if el.text == u'容許': self.driver.find_element_by_android_uiautomator('new UiSelector().text("容許")').click() elif el.text == u'始終容許': self.driver.find_element_by_android_uiautomator('new UiSelector().text("始終容許")').click() elif el.text == u'肯定': self.driver.find_element_by_android_uiautomator('new UiSelector().text("肯定")').click() except: pass
應用內部:同上處理方式。用例執行的時候,一邊執行一邊判斷是否有彈窗。app