1. 程式人生 > >1030Appium app自動化測試經驗分享-toast提示語 獲取及斷言

1030Appium app自動化測試經驗分享-toast提示語 獲取及斷言

一)toast訊息 獲取及斷言

什麼是Toast? 在螢幕下方浮現出一個視窗,顯示一段時間後又消失,這個視覺化元件叫做 Toast,它主要用於提示使用者某種事件發生了。如圖3、圖4

圖3是 對某車牌操作成功後的提示

圖4是 登入成功後的提示

Appium 官方文件:

Supported Platforms Appium supports app automation across a variety of platforms, like iOS, Android, and Windows. Each platform is supported by one or more “drivers”

其中 Android (BETA) The Espresso Driver The UiAutomator2 Driver (DEPRECATED) The UiAutomator Driver (DEPRECATED) The Selendroid Driver

對Android 想定位toast元素,這裡一定要注意automationName的引數是Uiautomator2才能定位到。故而需要在最初的配置增加此項:desired_caps[“automationName”] = ‘Uiautomator2’

    def get_toast(self, text):
        try:
            WebDriverWait(self.driver, 10, 0.05).until(EC.presence_of_element_located((By.XPATH, '//*[contains(@text, "%s")]' % text[1:3])))
            print('可以找到這個toast')
        except:
            print('找不到這個toast')

這是我寫的一個方法,只為了 能不能找到toast:

  1. 因為toast的存在時間還算比較久(2-3秒總有的),所以可以把顯式等待的間隔查詢時間設定大一點,像0.5秒;我是用這個0.05秒的間隔時間去查詢 後面例子的‘正在重新整理’和‘重新整理完成’的
  2. 我最初又掉進‘經驗主義’的坑:我要定位這toast,那我總得使用uiautomatorviewer或inspector來定位知道它的屬性值啊,使用uiautomatorviewer始終沒找到,我就無奈了。直到朋友提醒我,才醒悟:元素的text的屬性值應該就是它的提示,完全就可以用xpath來完成定位;’//*[@text=“XXXX”)
  3. ‘//*[contains(@text, “%s”)]’ % text[1:3] 擷取傳入text的第二三位的值 作為定位toast的依據;我是想做斷言的,用我傳入的text值去定位 然後再作為斷言的依據,感覺有點不太好,所以才會用部分text來定位,再用獲取的text和傳入的做斷言。

如果我想做斷言呢?


    def toast_duanyuan(self, text):
        """這兒對於一閃而過的,就經常在第二次去找元素,想拿來某屬性做斷言,提示 找不到元素"""
        duanyuan =True
        try:
            WebDriverWait(self.driver, 10, 0.05).until(EC.presence_of_element_located((By.XPATH, '//*[contains(@text, "%s")]' % text[1:3])))
            print('可以找到這個toast')
        except:
            print('找不到這個toast')
            duanyuan = False

        if duanyuan is True:
            self.assertEqual(self.driver.find_element_by_xpath('//*[contains(@text, "%s")]' % text[1:3]).get_attribute('text'), text, '但是 text斷言失敗了')
            print('text屬性值 斷言成功')
        else:
            self.assertTrue(duanyuan, '斷言失敗')

這方法對於一閃而過的提示(或元素) 不保證能正常斷言。 但是第二次去查詢元素獲取text屬性值,可以用driver.find_element_by_android_uiautomator(‘textContains("%s")’ % text[1:3]).get_attribute(‘text’),會比起xpath定位略微更快。

二)重新整理提示語 捕獲

前面例子說的一閃而過的提示 即 本例; 在很多新聞資訊類app或朋友圈等情景中(下方 圖1、圖2),往往會有下拉重新整理的設計,

圖1

圖2

不推薦給這個提示 作斷言;太費力不討好。如果非想確定到底有沒有重新整理成功,建議是確定 這個‘重新整理完成’的提示 存在,就結束。

‘正在重新整理’ ‘重新整理完成’ 這也就是我為什麼將前面寫的方法中 text【1:3】 text擷取第二三位,確保絕對不同。(擷取‘重新整理’,有可能就判斷成另一個)

交流技術 歡迎+QQ 153132336 zy