1. 程式人生 > >appium 提示報錯“TypeError: 'unicode' object is not callable”的解決方式!

appium 提示報錯“TypeError: 'unicode' object is not callable”的解決方式!

轉自:https://www.cnblogs.com/syw20170419/p/7018944.html

這裡提到的這個報錯,是小錯誤且容易經常會犯,有時需要特別注意使用。

目的要求結果:根據某個元素的id值獲取到對應id的text值,並且將獲取的text值與本身存在的text值做比較,檢視text值是否相等,這在自動化測試過程中經常會存在的做法,主要用作測試之後的檢查,檢視是否自動化執行到某一個步驟成功,因此通過id獲取到text的前提條件是“此id對應的text必須存在值”,如下截圖所示,只有id與text同時存在,才可以獲取到text值,否則失敗。

錯誤程式碼如下:

self.log.info("check_search_message........檢查搜尋簡訊")
        sleep(2)
        a = self.device.find_element_by_id("com.android.mms:id/action_compose_new").text()
        self.log.info(type(a))    
        self.log.info(a)
        if a == u'新建資訊':
            self.log.info('新建資訊判定成功!')
        else:
            self.log.info('新建資訊判定失敗!')

以上的寫法,執行將會出現報錯“TypeError: 'unicode' object is not callable”,錯誤的原因:self.device.find_element_by_id("com.android.mms:id/action_compose_new").text()中的text()不是一個函式,而是一個屬性,因為通過@property能把python中定義的函式,當做屬性訪問從而提供友好的訪問方式,來看appium的底層方法,如下圖:

改正點:

  去掉text後的括號,正確的為:self.device.find_element_by_id("com.android.mms:id/action_compose_new").text,以此text當做屬性來訪問