1

我有一个使用 VS2010 为在机器 A 上运行的 TFS2010 构建的编码 UI 测试。我在机器 A 上安装了一个测试代理,测试可以成功运行。我的 testsettings 文件>Roles 设置为 RemoteExecution,因为这些 codedUI 测试始终需要在机器 A 上运行。该文件始终显示我指定的“已连接到控制器”。

我将代码检查到构建服务器(机器 B)中,但它失败了。在 codedUI 程序集上将 copy local 设置为 false 时,构建失败并出现错误:

“无法运行:无法初始化单元测试扩展‘urn:CodedUITest’:未为以下属性注册单元测试扩展:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute。”

在机器 B 上的应用程序日志中,我得到以下信息:

(QTAgent32.exe,PID 5308,线程 8)GetCollectorType:无法获取收集器 'Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector、Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo、Version=10.0.0.0、Culture= 的类型中性,PublicKeyToken=b03f5f7f11d50a3a':System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo,Version=10.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。该系统找不到指定的文件。文件名:“Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo,版本=10.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”
在 System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射仅,StackCrawlMarkHandle stackMark,IntPtr pPrivHostBinder,布尔 loadTypeFromPartialName,ObjectHandleOnStack 类型)在 System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) 在 System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectOnly, StackCrawlMark& stackMark) 在 System.Type.GetType(String typeName, Boolean throwOnError) 在 Microsoft.VisualStudio.TestTools .DataCollection.ExecutionPluginManager.GetCollectorType(String collectorTypeName, Exception& loadException)

警告:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。注意:与程序集绑定失败日志记录相关的一些性能损失。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

在管理控制台中,我得到了这个:

读取 sqm 注册表项时遇到以下错误:TF255003:找不到以下功能的安装路径:ApplicationTier。未安装该功能,或者您必须使用不同的安装路径。

在编码的 UI 程序集上将本地复制设置为 true,我在 VS 的构建资源管理器中没有收到任何错误,但构建失败并显示 0/0 测试运行。在机器 B 上的应用程序日志中,我得到:

找不到来自源 VSTTExecution 的事件 ID 0 的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复组件。

如果事件起源于另一台计算机,则显示信息必须与事件一起保存。

活动中包含以下信息:

(MSTest.exe,PID 5544,线程 1)枚举程序集时抛出异常:Microsoft.VisualStudio.TestTools.Exceptions.EqtDataException:无法加载测试容器 'C:\Builds\1\Project\Binaries\Microsoft.VisualStudio.QualityTools .CodedUITestFramework.dll' 或其依赖项之一。错误详细信息:System.IO.FileNotFoundException:无法加载文件或程序集 “Microsoft.VisualStudio.QualityTools.Vsip,版本=10.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。

在 Microsoft.VisualStudio.TestTools.TestTypes.Unit.AssemblyEnumerator.EnumerateAssembly(IWarningHandler 警告处理程序,字符串位置,ProjectData projectData , ObjectHandle assemblyResolverWrapper) 在 Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAttributeEnumerator.Read(ITestTypeExtensionClientSidesProvider 提供程序, IWarningHandler warningHandler, String assemblyFileName, ProjectData projectData, TestRunConfiguration testRunConfiguration)

机器 B 确实安装了 VS2010 express。

我还需要做什么才能在机器 B(构建机器)上构建此构建,但在机器 A(使用测试代理)上运行测试?我还能做些什么来诊断这个?

更新:我尝试手动将 qualitytools.vsip dll 复制到项目中,并以复制本地设置为 true 的方式引用它,但现在我又回到了

“无法初始化单元测试扩展‘urn:CodedUITest’:未为以下属性注册单元测试扩展:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute。”

4

3 回答 3

2

请检查目标框架未设置为 .NET 框架 4 客户端配置文件的项目属性。而是设置为 .Net 框架 4(没有客户端配置文件)

于 2013-07-26T14:31:07.157 回答
0
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UITesting.HtmlControls;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodedUITestProject1.Libraries
{
    class generic
    {
        public static BrowserWindow mParentWindow { get; set; }
        public static BrowserWindow ParentWindow
        {
            get
            {
                if(mParentWindow==null)
                { mParentWindow = TopParentWindow(); }
                return mParentWindow;
            }
        }

        public static BrowserWindow TopParentWindow()
        {
            BrowserWindow window = new BrowserWindow();
            window.SearchProperties[UITestControl.PropertyNames.ClassName]=BrowserWindow.CurrentBrowser.ToString();
            return window;
        }


        public enum PropertyType
        { Id,
          Name,
          ClassName,
          InnerText,
          TagInstance
        }

        public static void EnterText<T>(PropertyType type,string propvalue,string text) where T:HtmlControl
        {
            HtmlControl genericControl = (T)Activator.CreateInstance(typeof(T), new object[] { ParentWindow });
            if (type==PropertyType.Id)
            {
                genericControl.SearchProperties[HtmlControl.PropertyNames.Id] = propvalue;

            }

            else if (type == PropertyType.Id)
            {
                genericControl.SearchProperties[HtmlControl.PropertyNames.Id] = propvalue;

            }
            Keyboard.SendKeys(genericControl, text);
        }

        public static void ClickLink<T>(PropertyType type, string propvalue) where T : HtmlControl
        {
            HtmlControl genericControl = (T)Activator.CreateInstance(typeof(T), new object[] { ParentWindow });
            if (type == PropertyType.Id)
            {
                genericControl.SearchProperties[HtmlControl.PropertyNames.Id] = propvalue;

            }

            else if (type == PropertyType.Id)
            {
                genericControl.SearchProperties[HtmlControl.PropertyNames.Id] = propvalue;

            }
            //Assert.IsTrue(genericControl.WaitForControlExist(40000));
            Mouse.Click(genericControl);

        }

         public static Boolean ExistLink<T>(PropertyType type, string propvalue) where T : HtmlControl
        {
            HtmlControl genericControl = (T)Activator.CreateInstance(typeof(T), new object[] { ParentWindow });
            if (type == PropertyType.Id)
            {
                genericControl.SearchProperties[HtmlControl.PropertyNames.Id] = propvalue;

            }

            else if (type == PropertyType.Id)
            {
                genericControl.SearchProperties[HtmlControl.PropertyNames.Id] = propvalue;

            }
            try
            {
                Assert.IsTrue(genericControl.WaitForControlExist(4000));
                return true;

            }
            catch (Exception e)
            {
                return false;
            }
            //Mouse.Click(genericControl);

        }

    }
}
于 2015-07-13T09:28:51.500 回答
0
    Solution 1:  Replace the name as that seen in pop UP. Might be this code can help clicking it

    WinWindow pop = new WinWindow(null);
                pop.SearchProperties.Add("Name", "Message from webpage", "ClassName", "#32770");

    ‘Windows Internet Explorer
                pop.TechnologyName = "MSAA";
                pop.DrawHighlight();

//------------
“Usinng MSTEST.exe to generate result”

C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE>MSTest /testcontainer:
D:\Practise\CodedUITestProject1\CodedUITestProject1\CodedUITestProject1\bin\Debu
g\CodedUITestProject1.dll /test:CodedUITestMethod1 /resultsfile:D:\SachintestRes
.trx


 public void CodedUITestMethod1()
        {
            // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
            // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
            string testcase = " /testcontainer:" + "D:\\Practise\\CodedUITestProject1\\CodedUITestProject1\\CodedUITestProject1\\bin\\Debug\\CodedUITestProject1.dll /test:CodedUITestMethod1 /resultsfile:D:\\SachintestResAut.trx";

            string Path = @"C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\MSTest";

            Process myProcess = new Process();
            ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(Path, testcase);
            myProcessStartInfo.UseShellExecute = false;
            try
            {
                myProcess.StartInfo = myProcessStartInfo;
                myProcess.Start();
                myProcess.BeginOutputReadLine();
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

                WinText text = new WinText(pop);

                text.SearchProperties.Add("Name", "Some Name");
                String msg = text.GetProperty("DisplayText").ToString();

                if (msg.Contains("Data saved."))
                {
                    Console.WriteLine("System is displaying " + msg);
                }
                else
                {
                    Console.WriteLine("System is displaying " + msg);
                }

                WinButton ok = new WinButton(pop);
                ok.TechnologyName = "MSAA";
                ok.SearchProperties.Add("Name", "OK");
                Mouse.Click(ok);

    Solution 2: Try the Browser Dialog Actions like OK,Cancel,Close .May be it can be helpful. PFB snapshot below.

    try
                {
                    BrowserWindow browserWindow = new BrowserWindow();
                    browserWindow.PerformDialogAction(BrowserDialogAction.Ok);
                }
                catch (Exception)
                {
                    // If a popup does not exists and an error is thrown, continue...
                    Playback.PlaybackSettings.ContinueOnError = true;
                }

//C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE>MSTest /testcontainer: D:\Practise\CodedUITestProject1\CodedUITestProject1\CodedUITestProject1\bin\Debug\CodedUITestProject1.dll /test:CodedUITestMethod1 /resultsfile:D:\ SachintestRes.trx

 public void CodedUITestMethod1()
        {
            // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
            // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
            string testcase = " /testcontainer:" + "D:\\Practise\\CodedUITestProject1\\CodedUITestProject1\\CodedUITestProject1\\bin\\Debug\\CodedUITestProject1.dll /test:CodedUITestMethod1 /resultsfile:D:\\SachintestResAut.trx";

            string Path = @"C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\MSTest";

            Process myProcess = new Process();
            ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(Path, testcase);
            myProcessStartInfo.UseShellExecute = false;
            try
            {
                myProcess.StartInfo = myProcessStartInfo;
                myProcess.Start();
                myProcess.BeginOutputReadLine();
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
于 2015-07-13T09:40:17.310 回答