如何正确声明类变量(CUIT控件)

时间:2019-01-11 11:43:07

标签: c# coded-ui-tests

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

我尝试在类中声明变量并在构造函数中添加属性(pendingButton1) 创建函数以返回控件并将其分配给类(pendingButton2)中的变量,但均不起作用。

当我在要在其中使用变量的函数中声明变量(或通过函数创建变量)时,它就起作用了。

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()函数外部声明未决按钮时使它起作用,因为它已在其他多个函数中使用。

2 个答案:

答案 0 :(得分:1)

辅助函数Controls.getWpfButton()仅返回按钮的属性,而不是“真实”按钮的属性。它必须在构造函数中使用,然后可以在类中的任何位置使用。我不会说它的最佳做法,但是对我有用。

Press.cs

public partial class Press : SharedElements
    {
        private WpfButton pendingButton;

    public Press(WpfWindow wpfWindow):base(wpfWindow)
        {
            pendingTab = Controls.getWpfButton(_wpfWindow, "Tab1Button");
        }

    public void clickPendingButton() {
        Mouse.Click(pendingButton);
    }
}

Controls.cs

internal static WpfButton getWpfButton(WpfWindow wpfWindow, string AutomationId)
    {
        WpfButton button = new WpfButton(wpfWindow);
        button.SearchProperties[WpfControl.PropertyNames.AutomationId] = AutomationId;
        return button;
    }

答案 1 :(得分:0)

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

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分配到支持字段以引起新的搜索,如this Q&A所示。