我已经在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”
非常感谢
答案 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;
,没有隐藏访问修饰符。