Попытка получить текст в расширенной ячейке сетки данных

У меня есть AdvancedDataGrid, который загружает данные из веб-службы. Он загружает только материалы верхнего уровня, а затем, когда вы нажимаете стрелки, он получает эти данные.

Все, что я хочу сделать, это узнать, есть ли текст в одной из ячеек. Я изначально сделал это:

public static function assertTextInAdg(params:Object):Boolean{
    // Gets the ADG
    trace('youre in the assertTextInAdg function');
    var grid:* = FPLocator.lookupDisplayObject(params);
    trace('var grid:* = FPLocator.lookupDisplayObject(params): ' + grid);
    // Convert ADG to automation delegate to get an array of column names
    var newGrid:* = new AdvancedDataGridAutomationImpl(grid);
    trace('var newGrid:* = new AdvancedDataGridAutomationImpl(grid): ' + newGrid);
    var datas:AdvancedDataGridTabularData = newGrid.automationTabularData as AdvancedDataGridTabularData;
    trace('var datas:AdvancedDataGridTabularData = newGrid.automationTabularData as AdvancedDataGridTabularData: ' + datas);
    var columnId:Array = datas.columnNames as Array;
    trace('var columnId:Array = datas.columnNames as Array: ' + columnId);
    // Convert ADG data to an array of rows
    var gridView:HierarchicalCollectionView = grid.dataProvider as HierarchicalCollectionView;
    trace('var gridView:HierarchicalCollectionView = grid.dataProvider as HierarchicalCollectionView: ' + gridView);
    var gridData:HierarchicalData = gridView.source as HierarchicalData;
    trace('var gridData:HierarchicalData = gridView.source as HierarchicalData: ' + gridData);
    var gridArrayColl:ArrayCollection = gridData.source as ArrayCollection;
    trace('var gridArrayColl:ArrayCollection = gridData.source as ArrayCollection: ' + gridArrayColl);
    var gridArray:Array = gridArrayColl.source as Array;
    trace('var gridArray:Array = gridArrayColl.source as Array: ' + gridArray);
    var validator:String = params.validator;
    trace('var gridArray:Array = gridArrayColl.source as Array: ' + validator);

    for (var i:int = 0; i < gridArray.length; i++) {
        for (var j:int = 0; j < columnId.length; j++) {
            if (gridArray[i][columnId[j]] == validator) { return true; }
        }
    }

    throw new Error("Validator not found in ADG.");

}

Это работает, если данные предоставляются из кода, но теперь я пытаюсь сделать то же самое с данными, предоставляемыми с сервера, и трассировки получаются такими:

youre in the assertTextInAdg function
var grid:* = FPLocator.lookupDisplayObject(params):           companyDashboard.dashboardCanvas.dashboardGrid
var newGrid:* = new AdvancedDataGridAutomationImpl(grid): [object AdvancedDataGridAutomationImpl]
var datas:AdvancedDataGridTabularData = newGrid.automationTabularData as AdvancedDataGridTabularData: [object AdvancedDataGridTabularData]
var columnId:Array = datas.columnNames as Array: @objectName,@customObjectType,@owner,@value0,@value1,@icon1,@value2,@icon2,@value3,@icon3,@value4,@icon4,@value5,@value6,@icon6,empty
var gridView:HierarchicalCollectionView = grid.dataProvider as HierarchicalCollectionView: [object HierarchicalCollectionView]
var gridData:HierarchicalData = gridView.source as HierarchicalData: [object HierarchicalData]
var gridArrayColl:ArrayCollection = gridData.source as ArrayCollection: null

И тогда это терпит неудачу, потому что я не могу получить источник, я думаю. Я полностью открыт для других стратегий, и я застрял на этой проблеме уже 10 дней. Кажется, что это будет относительно легко. Спасибо заранее за любые данные.

** ОБНОВИТЬ **

Я шел немного другим путем. Сейчас я пытаюсь перебрать HierarchicalCollectionView с помощью курсора. Кажется, это работает. Но когда я получаю узел, я не могу сделать с ним ничего полезного... Я искал примеры, но пока все они останавливаются на получении узла. Что означает, что это глупый вопрос, я знаю.

 public static function assertTextInAdg(params:Object):Boolean{
    // Gets the ADG
    trace('youre in the assertTextInAdg function');
    var grid:* = FPLocator.lookupDisplayObject(params);
    trace('var grid:* = FPLocator.lookupDisplayObject(params): ' + grid);
    var adgData:* = grid.hierarchicalCollectionView;
    trace('var adgData:* = grid.hierarchicalCollectionView: ' + adgData);
    trace('AdgData.length() = ' + adgData.length);
    var cursor:* = adgData.createCursor();
    while(!cursor.afterLast) {
        var node:Object = cursor.current;
        cursor.moveNext();
 }

Это вывод trace():

youre in the assertTextInAdg function
var grid:* = FPLocator.lookupDisplayObject(params):     testApp.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.Panel5.myADG
var adgData:* = grid.hierarchicalCollectionView: [object HierarchicalCollectionView]
AdgData.length() = 8
node.getData: undefined
constructor: [class Object]
hasRoot: undefined
length: undefined
openNodes: undefined
prototype: undefined
showRoot: undefined
source: undefined
node.getData: undefined
constructor: [class Object]
hasRoot: undefined
length: undefined
openNodes: undefined
prototype: undefined
showRoot: undefined
source: undefined
node.getData: undefined
constructor: [class Object]
hasRoot: undefined
length: undefined
openNodes: undefined
prototype: undefined
showRoot: undefined
source: undefined

person Joel Klabo    schedule 06.01.2011    source источник


Ответы (1)


Используя селен и FlexPilot, я проверяю текст в сетке

selenium.flexAssertProperty("id=MyAppInFlex", "chain=id:userGrid/name:AdvancedListBaseContentHolder*/name:AdvancedListBaseContentHolder*, validator=text|Maria Marcano");

У меня есть запись в блоге с информацией о Selenium и FlexPilot — http://mariangemarcano.blogspot.com/2010/08/selenium-testing-with-flex-pilot.htmlhttp://mariangemarcano.blogspot.com/2010/10/automating-myappinflexswf-useful.html

person MariangeMarcano    schedule 07.01.2011
comment
Большое спасибо за ответ! У меня есть несколько вопросов. Я не видел такого синтаксиса, который вы используете для валидатора: validator=text|Maria Marcano Я использовал валидатор только со строкой, например: validator=Maria Marcano, каково значение текста|? Кроме того, просто чтобы убедиться, что я понимаю, что это делает. flexAssertPropert прошел бы тест, если бы Мария Маркано была видна в одной из ячеек ADG, верно? - person Joel Klabo; 08.01.2011
comment
validator=text|Maria Marcano, сообщит о доступе к свойству и проверяемом значении. Я думаю, что это не будет проверять только видимость, у которой есть свойство с этим значением. - person MariangeMarcano; 10.01.2011
comment
Спасибо большое, сегодня попробую. - person Joel Klabo; 10.01.2011
comment
Я попробовал это сегодня: flexAssertProperty chain = id: myADG, validator = text | Southwest, и я получаю эту ошибку: текстовый атрибут [ошибка] не существует для этого объекта. Это скриншот моего ADG, imgur.com/rixUa имеет ли это какое-то значение для вас? Еще раз спасибо за помощь. - person Joel Klabo; 11.01.2011
comment
Марианж, я заметил, что у тебя есть свой форк библиотеки flex-pilot. Вам нужно было изменить часть кода, чтобы это работало на ADG? - person Joel Klabo; 11.01.2011
comment
Нет, изменение, которое я сделал, было связано с проблемой при выполнении flexAssertProperty, и эта проблема была исправлена. - person MariangeMarcano; 11.01.2011
comment
Попробуйте записать действия (щелкните Arizona, а затем Southwest), чтобы увидеть конкретную цепочку доступа. Вероятно, вам потребуется доступ к такой цепочке, чтобы получить доступ к текстовому свойству id:myADG/name:AdvancedListBaseContentHolder*/name:AdvancedListBaseContentHolder* - person MariangeMarcano; 11.01.2011