2014-01-16 63 views
1

你好,我使用此代碼讀取datagridview的cell.Its工作的罰款,直到對象引用未設置爲一個對象(CacheRequest)(UI)

 var myString = targetText.Cached.Name; 

targettext的實例爲null

代碼:

 LogMessage("Getting RootElement..."); 
     AutomationElement rootElement = AutomationElement.RootElement; 
     if (rootElement != null) 
     { 
      LogMessage("OK." + Environment.NewLine); 

      Automation.Condition condition = new PropertyCondition(AutomationElement.NameProperty, "Form1"); 

      LogMessage("Searching for Test Window..."); 
      AutomationElement appElement = rootElement.FindFirst(TreeScope.Children, condition); 

      if (appElement != null) 
      { 
       LogMessage("OK " + Environment.NewLine); 
       LogMessage("Searching for Gridview control..."); 
       AutomationElement txtElementA = GetTextElement(appElement, "dg"); 
       var rows = txtElementA.FindAll(TreeScope.Children, PropertyCondition.TrueCondition); 
       foreach (AutomationElement loginLine in rows) 
       { 
        var loginLinesDetails = loginLine.FindAll(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Custom)); 

        for (var i = 0; i < loginLinesDetails.Count; i++) 
        { 
         var cacheRequest = new CacheRequest 
         { 
          AutomationElementMode = AutomationElementMode.None, 
          TreeFilter = System.Windows.Automation.Automation.RawViewCondition 
         }; 

         cacheRequest.Add(AutomationElement.NameProperty); 
         cacheRequest.Add(AutomationElement.AutomationIdProperty); 

         cacheRequest.Push(); 

         var targetText = loginLinesDetails[i].FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "TextBlock"));// targettext is null 

         cacheRequest.Pop(); 

         var myString = targetText.Cached.Name;//Object reference not set ///to instance of an object error 
        } 

       } 

      } 
      else 
      { 
       WriteLogError(); 
      } 
     } 

這是一個我正在嘗試閱讀的示例表單的圖像。如果它適用於這個小應用程序,它肯定會適用於大型應用程序。

enter image description here

所有我想要做的就是讀取datagridview.I的細胞不知道我是否在做正確與否任何一個可以請幫我這個。 會有很大的升值,如果有人可以幫助我

+1

它不是一個重複的,請閱讀問題再一次沒有標題 –

+0

您是否嘗試過檢查,如果targettext爲空?如果它的空你不應該訪問它,它會給你對象引用沒有設置...錯誤。我認爲akshay提出的建議是有道理的 – ViSu

+1

是的,我在那條線上得到了空白。我可以在這條線上得到一個值,儘管它是空的。我做錯了一件事 –

回答

3

在您嘗試以下條件的值賦給

var myString = targetText.Cached.Name; 

檢查

if(targetText != null && targetText.Cached!=null) 
    var myString = targetText.Cached.Name; 

可能的情況下,繼行返回NULL

loginLinesDetails[i].FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "TextBlock")); 
+0

我已經更新了我的問題,你可以請看看它對不起,我忘了提及targettext爲null –

+0

@ Ishaq Gi這就是爲什麼你會得到例外。正如你試圖訪問NULL中的值。像null.Cached.Name。 – Akshay

+0

是的,我在那條線上得到空值。我可以得到一個價值在這一行,儘管null.Am我做錯了Akshay? –

1

問題EM 可能是你正在尋找一個TextBox控制,由線

LogMessage("Searching for TextBox A control..."); 

的建議,但在PropertyCondition您使用"TextBlock"作爲類名。

那麼你應該這樣寫:

var targetText = loginLinesDetails[i].FindFirst(TreeScope.Children, 
    new PropertyCondition(AutomationElement.ClassNameProperty, "TextBox")); // here