关于c#:如何正确声明类变量(CUIT Controls)

How to properly declare class variables (CUIT Controls)

我正在为 WPF 应用程序设置编码 UI 测试,并且我想使用代码方法而不是记录并生成代码方法。我想通过代码使用页面对象,我需要在页面对象中声明控件(按钮、选项卡等)变量,这些变量将被多个函数使用。

我尝试在类中声明变量并在构造函数中添加属性 (pendingButton1)
并创建函数,该函数返回控件并分配给类中的变量(pendingButton2)但均无效。

当我在要在(pendingButton3 和 4)中使用变量的函数中声明变量(或通过函数创建变量)时,它会起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class Press : Header
{
    WpfToggleButton pendingButton1 = new WpfToggleButton(_wpfWindow);
    WpfToggleButton pendingButton2 = Controls.Press.getPendingButton(_wpfWindow);

    public Press(WpfWindow wpfWindow):base(wpfWindow)
    {
        this.pendingButton1.SearchProperties[WpfControl.PropertyNames.AutomationId] ="Tab1Button";
    }

    public void clickPendingButton() {
        WpfToggleButton pendingButton3 = new WpfToggleButton(_wpfWindow);
        pendingButton3.SearchProperties[WpfControl.PropertyNames.AutomationId] ="Tab1Button";

        WpfToggleButton pendingButton4 = Controls.Press.getPendingButton(_wpfWindow);

        Mouse.Click(pendingButton1); //UITestControlNotFoundException
        Mouse.Click(pendingButton2); //UITestControlNotFoundException
        Mouse.Click(pendingButton3); //This works
        Mouse.Click(pendingButton4); //This works
    }
}

当我在 clickPendingButton() 函数之外声明 pendingButton 时,我想让它工作,因为它用于多个其他函数。


n


您想要的似乎正是 Coded UI 记录和生成工具生成的排序 f 代码。它创建了许多具有以下风格结构的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public WpfToggleButton PendingButton
{
    get
    {
        if ((this.mPendingButton == null))
        {
            this.mPendingButton = new WpfToggleButton( ... as needed ...);
            this.mPendingButton.SearchProperties[ ... as needed ...] = ... as needed ...;
        }

        return this.mPendingButton;
    }
}

private WpfToggleButton mPendingButton;

此代码将按钮声明为类属性 PendingButton,并带有一个具有初始和默认值 null 的私有支持字段。第一次需要该属性时,get 代码执行所需的搜索并将找到的控件保存在私有字段中。然后在属性的每次后续使用中返回该值。请注意,可以将 null 分配给支持字段以引起新的搜索,如此 Q 所示