2013-03-26 46 views
6

我正在嘗試使用Appium開始測試我公司的移動應用程序。我希望使用Python綁定來編寫腳本,我需要從Android應用程序開始。枚舉Selenium Python綁定中的所有元素Appium

我有Appium的例子都工作。我可以運行grunt android並進行測試,我可以運行android.py示例應用程序。

但我是一個新手,我沒有清晰的圖片來說明如何識別我公司的應用程序中的控件。我對Python很有經驗,所以我想我只是建立一個控制元素列表並反思它們。

我被卡住了!所有的方法,如driver.find_elements_by_tag_name()需要一個特定的標識符(或者至少我沒有找到任何通配符工作)。

如何反思代表被測試Android應用程序的元素的Appium樹?我如何列舉所有元素,以便我可以反思它們?有沒有一棵樹,我可以走,找到應用程序中的所有元素?

我希望能夠弄清楚這些元素,而無需獲取應用程序的源代碼,在Eclipse中構建應用程序等,但如果有必要,我可以這樣做。

P.S.我寧願使用Python,但如果這種方法效果更好,則可以使用其他方法來進行內省。我仍然可以用Python編寫實際的測試,除非其他語言以某種方式明顯更好。

回答

2

我仍然想從Python中反思Selenium接口。但是我已經找到了一種可行的方法來清晰地展示應用程序的佈局,然後很容易就可以知道如何編寫Selenium測試。

首先,讓您的應用程序在連接到您的Android開發計算機或模擬器的真實設備上運行。基本上如果你運行adb devices你想看到一個設備,一個運行你的應用程序。接下來,運行uiautomatorviewer工具,然後單擊Device Screenshot工具欄圖標。 (只有兩個工具欄圖標:第一個是Open圖標,看起來像文件夾,並且您想要的那個圖標看起來像是一堆手機。)

一旦完成該操作,應用程序的圖像出現了,左邊是截圖,右邊是可瀏覽的樹大綱。大綱顯示應用程序的所有控件以及其文本標籤(如果有)以及其他信息(例如clickable屬性是否爲該控件的truefalse)。

一個警告:控件顯示編號,但在Selenium綁定中,數字可能不一樣。在ApiDemos示例應用程序中,Graphics按鈕的索引號爲4,因爲它是第五個按鈕,但要通過其位置訪問它,我不得不使用索引5.索引0是一個不可點擊的對象,其中包含文本「API Demos」,在不同的FrameLayout對象中組成屏幕的標題。

所以,我能夠做此更改android.py腳本:

#elem = driver.find_element_by_name('Graphics') 
elem = driver.find_elements_by_tag_name('TextView')[5] 

註釋掉driver.find_element_by_name()通話,而是發現在整個應用第六TextView。這不是最佳做法,但它表明uiautomationviewer結果讓我可以查看我需要了解的控件。

現在我知道夠做反省的一點:

for elem in driver.find_elements_by_tag_name('TextView'): 
    if elem.text == "Graphics": 
     break 
else: 
    print("Could not find desired item") 

這不不僅僅是打電話driver.find_element_by_name()更好,但它表明我在正確的軌道上。

uiautomatorviewer是我的問題的實際解決方案。如果你有一個純Python的,請讓我知道它。

3

Appium支持WebDriver的「頁面源代碼」方法。所以你可以這樣做:

# assume you have a driver object 
import json 

source = driver.page_source 
source = json.loads(source) 
# you can now work with source as a python object 
+0

謝謝你的答案。我已經嘗試過了,並且它不適用於我......測試會話因錯誤而終止。你是用iOS應用程序還是Android應用程序測試它的?我敢打賭它適用於iOS,但我認爲它不適用於Android。 – steveha 2013-03-29 02:35:08