2014-09-30 76 views
2

我們有一個使用sproutcore開發的豐富的UI應用程序。我們試圖在Ruby中使用Selenium webdriver自動化頁面。使用動態生成的ID和隱藏項目,我們發現很難識別某些元素。應用程序很複雜。開發人員表示他們無法爲隱藏的項目或框架添加唯一的圖層ID。對於靜態頁面,他們添加了唯一的圖層標識或類名稱。QA Automation for rich sproutcore應用程序

我想從我的朋友那裏瞭解他們用於sproutcore應用程序的自動化功能嗎? 他們如何解決這些問題?

任何指針表示讚賞。

回答

0

即使網絡元素

動態生成的ID和隱藏的項目,我們發現很難確定一些

一種解決方案是要問,如果開發人員可以添加對他們命名模式,所以剛剛生成的最後一個字符即時。通過這樣做,你可以使用其中的某些位置的方法:

0

的一種方法,將與SproutCore的工作是使用SproutCore的視圖樹來標識元素而不是按層ID或類。例如,考慮這個基本的主網頁,

MyApp.mainPage = SC.Page.create({ 

    mainPane: SC.MainPane.extend({ 

    childViews: ['header', 'mainContent', 'footer'], 

    header: SC.ToolbarView.extend({ 
     layout: { height: 44 }, 

     childViews: ['headerButton'], 

     headerButton: SC.ButtonView.extend({ 
     layout: { centerX: 0, centerY: 0, height: 40, width: 100 }, 
     title: "Click Here" 
     }) 

    }), 

    mainContent: SC.View.extend({ 
     layout: { top: 44, bottom: 33 }, 

    // etc. 

雖然我們不知道這些元件的層IDS事前,我們知道在JavaScript中的父子關係。舉例來說,如果我需要某些元素從頁面,我可能會抓住他們提前像這樣,

// Retrieve target views for the current page. 
var mainPane = MyApp.mainPage.get('mainPane'), 
    header = mainPane.get('header'), 
    headerButton = header.get('headerButton'), 
    // … etc. 

// Then retrieve an element for acting upon. 
var buttonLayer = headerButton.get('layer'); // returns a DOM node 

// Or retrieve an element id for acting upon. 
var buttonLayerId = headerButton.get('layerId'); // returns the auto-generated id 

雖然我沒有與硒的第一手經驗,看來,你可以使用execute_script的webdriver實例方法運行一些簡單的查找,返回您需要的元素或您需要的元素的ID。

最後,請記住,一些意見可能會有動態變化的兒童,特別是SC.CollectionView子類如SC.ListView。在這種情況下,一旦您定位到父視圖,您就可以使用特定於該父視圖的方法輕鬆訪問您需要的子項,例如itemViewForContentIndex(idx)以獲取列表的項目視圖。

0

我用硒來自動(通過詹金斯)一些 QA測試爲Sproutcore app,在我的經驗,這通常是足夠具體的類名添加到SproutCore的對象,然後使用XPath表達式中硒針對那些類。

實施例:

bottomRightView: SC.View.design({ 
     classNames: ["bottomRightView"], 
     layout: { top: 60, width: 299, bottom:50, right: 15, zIndex: Maps.RIGHT_TOOL_BOX_PANE_ZINDEX }, 
     childViews: "resultsView noResultsView buttons featureView".w(), 

XPath表達式:

xpath=//div[contains(@class,'bottomRightView')] 

它始終是可能使用// @如果(調試)語句排除那些類名從生產的基礎之上。

上面提到的應用程序的Selenium IDE腳本示例:https://github.com/unicolet/mappu/tree/master/tests/selenium