2014-04-01 52 views
1

我對C#和CodedUI很新,所以請和我一起裸照!在C中遞歸地定位一個帶有InnerText的UIElement#

我有一個頁面上的許多HTMLDIV的,我試圖用

UIElement.getProperty("InnerText") 

問題是我不知道的DIV將有多少孩子有多少水平向下找到一個特定元素將會。所以我雖然遞歸會適用於這種情況,而不是嵌套的FOREACH語句。然而,因爲我的DIVS沒有填充.NAME屬性,並且.GetType始終是「HTMLDIV」,所以我不知道如何訪問子元素的.Innertext。我打算用這樣的方法:

ControlTypeIWantToFind result = 
       FindVisualChild<ControlTypeIWantToFind>(myPropertyInspectorView); 

public static T FindVisualChild<T>(DependencyObject depObj, string strMyInnerText) where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       return (T)child; 
      } 

      T childItem = FindVisualChild<T>(child); 
      if (childItem != null) return childItem; 
     } 
    } 
    return null; 
} 

但我想我需要的東西是這樣的:

if (child != null && child.innerText == strMyInnerText) 

我希望所有有道理......有人能夠幫助!

回答

0

在一個地方,我使用的代碼基於下面。它發現所有InnerText項目。

someControl.SearchProperties.Add("InnerText", "", PropertyExpressionOperator.Contains); 
UITestControlCollection colNames = someControl.FindMatchingControls(); 

在我用另一個地方:

string s = ""; // In case there is no InnerText. 
try 
{ 
    s = control.GetProperty("Text").ToString(); 
} 
catch (System.NotSupportedException) 
{ 
    // No "InnerText" here. 
} 

異常沒有與GetProperty記錄,我想我發現它調用一個沒有一個InnerText上的控件的方法時。我找不到任何TryGetPropertyMethod,但編寫自己的代碼很容易。


我還使用了基於這個遞歸例程的代碼來訪問hierarachy中的所有控件。

private void visitAllChildren(UITestControl control, int depth) 
{ 
    UITestControlCollection kiddies = control.GetChildren(); 

    foreach (UITestControl kid in kiddies) 
    { 
     if (depth < maxDepth) 
     { 
      visitAllChildren(kid, depth + 1); 
     } 
    } 
}