3

im, сделав тест кодированного интерфейса в Visual Studio 2010 для веб-приложения на C#, и я хочу нажать кнопку в 6-м столбце таблицы на основе внутренней текст столбца 1? Это возможно?Кодированный тест пользовательского интерфейса - нажмите «Управление по другим вещам» в строке таблицы

Так, например, у меня есть таблица с именами в столбце одна и другая информация, а затем кнопка в столбце 6. Все автоматически сгенерировано.

Я предполагаю, что если я смогу получить номер строки из ячейки, скажем, «Джон Смит», то я могу нажать кнопку для этой строки в столбце 6. Любые идеи? я попробовал поиск в Google и посмотрел, какие параметры я могу пройти, но я не сработал.

ответ

-1

Ваш вопрос не очень понятно мне, но проверить documentation на jQuery.trigger

Этот метод позволит вам эмулировать clickevent. Надеюсь, это то, что вам нужно.

+0

Извините, я чувствую, что вы полностью не поняли вопрос –

4

Возможно, что-то, на что основано следующее.

Доступ к таблице HTML путем копирования кода с кода, сгенерированного кодировщиком для утверждения или щелчка по ячейкам. Вы должны иметь что-то вроде:

HtmlCell theTable = new HtmlCell(this.UItheWindow.UItheTable.UIItemTable); 

Клетки таблицы можно получить, добавляя такие свойства, как:

theTable.FilterProperties[HtmlCell.PropertyNames.RowIndex] = "0"; 
theTable.FilterProperties[HtmlCell.PropertyNames.ColumnIndex] = "6"; 
UITestControl cell = theTable.Find(); 
HtmlCell wantedCell = (HtmlCell)cell; 

выше может быть использован в качестве тела метода возвращающего значения wantedCell. Теперь должно быть доступно имя:

wantedCell.InnerText; 

Доступ к кнопке, которую нужно щелкнуть, должен соответствовать аналогичному подходу.

Другой подход использует метод GetChildren для перемещения по таблице. Начните с получения theTable, как указано выше. Тогда что-то вроде

UITestControlCollection children = theTable.GetChildren(); 

Переберите children проверки свойств строки. Когда найденная строка найдена, вызовите этой строки и пройдите через них, чтобы найти нужный столбец. Некоторые моменты: вам может потребоваться цикл в столбцах перед циклом над строками. Вы можете напрямую индексировать в UITestControlCollection для строк и столбцов, а не зацикливать и проверять значения. В зависимости от того, как была написана таблица, могут быть дополнительные уровни между таблицей и ячейками, поэтому вам может потребоваться изучить детей, внуков, великих детей, отличных ... и т. Д.

+1

Я бы рекомендовал использовать инспектора объектов (перекрестье), чтобы исследовать объект, чтобы убедиться, что этот метод принесет результаты. У меня редко были таблицы, которые ведут себя так, как ожидалось :) Они часто кодируются с такой вложенностью, что они не совсем HtmlCells. Может быть, это моя неудача, но я не считаю само собой разумеющимся, что ячейка - это ячейка. – yonitdm

+1

@yonitdm делает очень хороший момент. Я использовал перекрестие для изучения структуры. Я также сделал рекурсивный спуск структуры с использованием 'GetChildren' и печати различных свойств каждого найденного элемента управления. – AdrianHHH

2

У меня есть несколько методов расширения, которые я использую для решения содержимого в таблицах (ручное кодирование, а не с помощью диктофона) -

Этого метод расширения для таблицы получает первую строку в таблице, которая содержит запрошенный текст в одном из своих клеток или контролирует

public static HtmlRow GetRow(this HtmlTable table, string cellContent) 
{ 
    if((UITestControl)table == (UITestControl)null) 
    throw new ArgumentNullException("table"); 

    if(cellContent.Length > 80) 
    cellContent = cellContent.Substring(0, 80); //Our table cells only display the first 80 chars 

    //Locate the first control in the table that has the inner text that I'm looking for 
    HtmlControl searchControl = new HtmlControl(table); 
    searchControl.SearchProperties.Add(PropertyNames.InnerText, cellContent); 

    //Did we find a control with that inner text? 
    if(!searchControl.TryFind()) 
    { 
    //If not, the control might be an HtmlEdit with the text 
    HtmlEdit firstTableEdit = new HtmlEdit(table); 
    //Get all of the HtmlEdits in the table 
    UITestControlCollection matchingEdits = firstTableEdit.FindMatchingControls(); 
    //Iterate through them, see if any have the correct text 
    foreach (UITestControl edit in matchingEdits) 
    { 
     if(cellContent == ((HtmlEdit)edit).Text) 
     searchControl = (HtmlControl)edit; 
    } 
    } 

    //We have(hopefully) found the control in the table with the text we're searching for 
    //Now, we spiral up through its parents until we get to an HtmlRow 
    while (!(searchControl is HtmlRow)) 
    { 
    searchControl = (HtmlControl)searchControl.GetParent(); 
    } 

    //The control we're left with should be an HtmlRow, and should be an Ancestor of a control that has the correct text 
    return (HtmlRow)searchControl; 
} 

После того, как вы сможете получить правильную строку, она становится относительно легко получить правильный контроль в этой строке (или правильный контроль в данной клетке в том, что строка)

В вашем бывшем достаточно, у вас есть кнопка в 6-м столбце строки.У кнопки, вероятно, есть некоторые свойства, связанные с ней, но даже без них, если мы сможем правильно ограничить наш поиск, она все равно будет работать. Предположим, наши таблицы с именем UITableCustomers - Объявите новую кнопку и ограничить его только 6 (индекс 5) ячейки в строке, содержащей «John Smith»

Mouse.Click(new HtmlInputButton(UITableCustomers.GetRow("John Smith").Cells[5])); 

Очевидно, что этот вызов идет на провал, если данный текст не существует в элементе управления в таблице.

+0

Ничего себе, это очень впечатляет, но я не уверен, где это поставить, а также как он знает, на какой стол посмотреть? я должен каким-то образом передать ему стол? –

+0

Методы расширения можно поместить в любой статический класс, а затем ссылаться на оператор using. Как правило, создайте статический класс только для целей хранения ваших методов расширения. После внедрения метода расширения в HtmlTable таблица теперь имеет метод .GetRow(). Как вы можете видеть в моем примере, я указываю UITableCustomers как свою таблицу и вызываю .GetRow() на нем. См. Http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx –

+0

Просто пытайтесь реализовать этот код и в этой строке searchControl.SearchProperties.Add (PropertyNames.InnerText, cellContent); я получаю PropertyNames оленья кожа существуют и на этой линии если TryFind оленья кожа существовать –

Смежные вопросы

 Смежные вопросы