2017-07-12 32 views
-7

は、だから私は、C#でUIAutomationを使用してChromeから開いているすべてのタブをGETTしようとしていますが、私はエラーを取得しておいてください。エラー「の値はnullにすることはできません」、UIAutomationElement

System.ArgumentNullException occurred

HResult=0x80004003
Message=Value can't be NULL.
Source=UIAutomationClient

StackTrace:
at System.Windows.Automation.TreeWalker.GetParent(AutomationElement element)
at chromeTabsTest.Program.Main(String[] args) in C:\Users...\chromeTabsTest\chromeTabsTest\Program.cs:line 31

エラーがで示されていますコード内のコメント。 question

+1

どのラインでエラーが表示されますか? –

+1

あなたのタイトルはあなたのエラーは "値はnullにはできません"と言っています - あなたの質問は "値は負ではありません"と言います。これらは2つの非常に異なるものと思われます。どちらですか? – Chris

+0

誰もあなたのコードを何の示唆もなく分析する時間がありません。その行にエラーがスローされます。 –

答えて

0

次の行が敏感言語があるようです::

using System; 
using System.Diagnostics; 
using System.Windows.Automation; 

namespace chromeTabsTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Process[] procsChrome = Process.GetProcessesByName("chrome"); 
      if (procsChrome.Length <= 0) 
      { 
       Console.WriteLine("Chrome is not running"); 
      } 
      else 
      { 
       foreach (Process proc in procsChrome) 
       { 
        // the chrome process must have a window 
        if (proc.MainWindowHandle == IntPtr.Zero) 
        { 
         continue; 
        } 
        // to find the tabs we first need to locate something reliable - the 'New Tab' button 
        AutomationElement root = AutomationElement.FromHandle(proc.MainWindowHandle); 
        Condition condNewTab = new PropertyCondition(AutomationElement.NameProperty, "New Tab"); 
        AutomationElement elmNewTab = root.FindFirst(TreeScope.Descendants, condNewTab); 
        // get the tabstrip by getting the parent of the 'new tab' button 
        TreeWalker treewalker = TreeWalker.ControlViewWalker; 
        AutomationElement elmTabStrip = treewalker.GetParent(elmNewTab); // <------------- Error here 
        // loop through all the tabs and get the names which is the page title 
        Condition condTabItem = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TabItem); 
        foreach (AutomationElement tabitem in elmTabStrip.FindAll(TreeScope.Children, condTabItem)) 
        { 
         Console.WriteLine(tabitem.Current.Name); 
        } 
       } 
      } 


      Console.Write("\nPress any key to continue..."); 
      Console.ReadKey(); 
     } 
    } 
} 

このコードは、別のスタックオーバーフローの質問からある「新しいタブ」ではなくがされていると言うことです

Condition condNewTab = new PropertyCondition(AutomationElement.NameProperty, "New Tab"); 

内部フィールドはローカライズされた文字列です。つまり、この行は、このテキストのローカライズされたバージョンを持つように更新する必要があります。

「信頼できるものを見つける」方が良いかもしれませんが、もしあれば何かを言うことができるように、私はクロムの自動化に慣れていません。

関連する問題