我在机器A上运行了使用VS2010为TFS2010构建的编码UI测试。我在机器A上安装了测试代理,测试成功运行。我的testsettings文件>角色设置为RemoteExecution,因为这些编码的测试总是需要在机器A上运行。文件总是说"连接到控制器"我指定的。
我将代码检查到构建服务器(机器B),但它失败了。在codedUI程序集上将copy local设置为false时,构建将失败并显示错误:
"不可运行:无法初始化单元测试扩展 ' urn:CodedUITest':未注册单元测试扩展 以下属性: Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute"
在机器B上的应用程序日志中,我得到了这个:
(QTAgent32.exe,PID 5308,Thread 8)GetCollectorType:无法获取 收集器的类型 ' Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a': System.IO.FileNotFoundException:无法加载文件或程序集 ' Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'要么 其中一个依赖项。该系统找不到指定的文件。 文件名: ' Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'
在System.RuntimeTypeHandle.GetTypeByName(String name,Boolean throwOnError,Boolean ignoreCase,Boolean reflectionOnly, StackCrawlMarkHandle stackMark,IntPtr pPrivHostBinder,Boolean loadTypeFromPartialName,ObjectHandleOnStack type)at System.RuntimeTypeHandle.GetTypeByName(String name,Boolean throwOnError,Boolean ignoreCase,Boolean reflectionOnly, StackCrawlMark&安培; stackMark,IntPtr pPrivHostBinder,Boolean System.RuntimeType.GetType(String。的loadTypeFromPartialName) typeName,Boolean throwOnError,Boolean ignoreCase,Boolean reflectionOnly,StackCrawlMark& stackMark)at System.Type.GetType(String typeName,Boolean throwOnError)at Microsoft.VisualStudio.TestTools.DataCollection.ExecutionPluginManager.GetCollectorType(字符串 collectorTypeName,Exception& loadException)警告:装配绑定日志记录已关闭。要启用程序集绑定 失败日志记录,设置注册表值 [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)为1.注意:有 与程序集绑定失败相关的一些性能损失 日志记录。要关闭此功能,请删除注册表值 [HKLM \ SOFTWARE \微软\融合!EnableLog]。
在管理控制台中我得到了这个:
在读取sqm注册表项时遇到以下错误: TF255003:找不到以下安装路径 功能:ApplicationTier。您没有安装该功能 必须使用不同的安装路径。
在编码的UI程序集上将copy local设置为true,我在VS中的Build Explorer中没有收到任何错误,但是构建失败并且说0/0测试运行。在机器B的应用程序日志中,我得到:
来自源VSTTExecution的事件ID 0的描述不能 找到。未安装引发此事件的组件 您的本地计算机或安装已损坏。你可以安装 或修复本地计算机上的组件。
如果事件源自另一台计算机,则显示信息 不得不与事件一起得救。
活动中包含以下信息:
(MSTest.exe,PID 5544,线程1)枚举时抛出异常 部件: Microsoft.VisualStudio.TestTools.Exceptions.EqtDataException:无法使用 加载测试容器 ' C:\构建\ 1个\项目\二进制\ Microsoft.VisualStudio.QualityTools.CodedUITestFramework.dll' 或其中一个依赖项。错误详情: System.IO.FileNotFoundException:无法加载文件或程序集 ' Microsoft.VisualStudio.QualityTools.Vsip ,版本= 10.0.0.0, Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个 依赖。系统找不到指定的文件。
在 Microsoft.VisualStudio.TestTools.TestTypes.Unit.AssemblyEnumerator.EnumerateAssembly(IWarningHandler warningHandler,String location,ProjectData projectData,ObjectHandle assemblyResolverWrapper)at Microsoft.VisualStudio.TestTools.TestTypes.Unit.AssemblyEnumerator.EnumerateAssembly(IWarningHandler warningHandler,String location,ProjectData projectData,ObjectHandle assemblyResolverWrapper)at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAttributeEnumerator.Read(ITestTypeExtensionClientSidesProvider provider,IWarningHandler warningHandler,String assemblyFileName, ProjectData projectData,TestRunConfiguration testRunConfiguration)
机器B确实安装了VS2010 express。
我需要做什么才能在机器B(构建机器)上进行此构建,而在机器A上运行测试(使用测试代理)?我还能做些什么来诊断这个?
更新:我尝试手动将qualitytools.vsip dll复制到项目中并以复制本地设置为true的方式引用它,但现在我又回到了
"无法初始化单元测试扩展程序' urn:CodedUITest':A 单元测试扩展未注册以下属性: Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute"
答案 0 :(得分:2)
请检查项目属性,即目标框架未设置为.NET framework 4客户端配置文件。而是设置为.Net framework 4(没有客户端配置文件)
答案 1 :(得分: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);
}
}
}
答案 2 :(得分: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&gt; MSTest / testcontainer: d:\实践\ CodedUITestProject1 \ CodedUITestProject1 \ CodedUITestProject1 \ BIN \得不 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);
}
}