在编码的UI测试中更改当前浏览器的麻烦

时间:2014-02-10 09:00:33

标签: c# coded-ui-tests system.reflection

我已经在C#中编写了一些自动化Web测试,他们使用Coded UI测试库。

这些测试不是一堆记录的动作,它们已在IE上编码和执行。

我正在使用Visual Studio 2010,我正在尝试在Firefox 3.6上启动测试。我已经为此安装了所需的组件。

问题是我想选择我想用来测试我的应用程序的浏览器,所以我想更改字段“currentBrowser”但我无法访问此属性,因为它是一个静态成员属性。

我曾尝试使用Reflection库来访问该属性,但我无法实现它。

这是我当前代码的示例:

BrowserWindow browserWin = new BrowserWindow();

// Copy the dll 
Assembly testAssembly = Assembly.LoadFile(@"c:\Microsoft.VisualStudio.TestTools.UITesting.dll");

// get type of class BrowserWindow from just loaded assembly
Type BrowserWindowType = testAssembly.GetType("Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow");

object browserInstance = Activator.CreateInstance(BrowserWindowType, new object[] {});
PropertyInfo BrowserPropertyInfo = BrowserWindowType.GetProperty("CurrentBrowser");   

//set value of property: public 
BrowserPropertyInfo.SetValue(browserInstance,"FireFox", null);
// get value of property: public 
string value = (string)BrowserPropertyInfo.GetValue(browserInstance, null);

我也试过这行代码:

typeof(BrowserWindow).InvokeMember("set_CurrentBrowser", BindingFlags.InvokeMethod | BindingFlags.DeclaredOnly |BindingFlags.Public | BindingFlags.Static, null, bw, args,null,null,null);

但是属性的值“currentBrowser”永远不会被修改。

我需要某种特殊权限吗?也许像“ReflectionPermission”

非常感谢

1 个答案:

答案 0 :(得分:3)

看起来应该是这样的:

BrowserWindow.CurrentBrowser = "firefox";
BrowserWindow bw = BrowserWindow.Launch(new Uri("uriAsString"));
// At this point, it should launch firefox if you have the current cross-browser
// components installed and the expected version of firefox (I have 26)

你说:

  

问题是我想选择我想用来测试我的应用程序的浏览器,所以我想更改字段“currentBrowser”但我无法访问此属性,因为它是一个静态成员属性。

静态不会阻止访问。这意味着您不需要该对象的实例来访问属性/方法。如果您通过对象浏览器查看该类,您将看到:

public static string CurrentBrowser { get; set; }

所以我们知道我们可以访问它,因为它是公开的。我们可以获取值并设置值,因为它包含get;set;,没有隐藏访问修饰符。