C# 处理弹出消息-编码UI测试 问题

C# 处理弹出消息-编码UI测试 问题,c#,testing,automated-tests,coded-ui-tests,C#,Testing,Automated Tests,Coded Ui Tests,我正在使用编码的UI测试生成器运行测试,并从头开始编写所有代码。我面临的问题是在测试的中间有一个弹出消息,结果“停留在这个页面”或“离开这个页面”。我希望我的测试能够点击“停留在这个页面” 弹出窗口有时会在事件发生后立即出现,有时会在几秒钟后出现 代码 因此,我在消息出现之前运行的事件是一个按钮单击: ClickButton(browser, "login"); void ClickButton(UITestControl parent, string id) { var butto

我正在使用编码的UI测试生成器运行测试,并从头开始编写所有代码。我面临的问题是在测试的中间有一个弹出消息,结果“停留在这个页面”或“离开这个页面”。我希望我的测试能够点击“停留在这个页面”

弹出窗口有时会在事件发生后立即出现,有时会在几秒钟后出现

代码
因此,我在消息出现之前运行的事件是一个按钮单击:

ClickButton(browser, "login");

void ClickButton(UITestControl parent, string id)
{
    var button = new HtmlButton(parent);
    button.SearchProperties.Add(HtmlButton.PropertyNames.Id, id);

    Mouse.Click(button);
}
我尝试了
Keyboard.SendKeys()
,但这只是将按键发送到浏览器窗口。我也试过使用录音工具。两者都不成功


在此事件之后,我需要等待弹出窗口出现,然后单击“停留在此页面”。有人知道如何做到这一点吗?

我们实际上绘制了这个确认窗口,它对我们很有用。 我们从一个名为Windows Internet Explorer的窗口开始 后跟一个名称为Windows Internet Explorer的窗格 最后用一个名字按钮停留在这个页面上

全部采用技术=MSAA

如果不希望每次都得到确认,则必须编写代码以等待控件准备就绪和适当的超时


希望这有帮助。

根据窗口的具体内容,您应该能够处理它,没有问题。我将使用inspector获取窗口的属性,并使用WaitFor*方法之一给它一些时间。下面是一个处理IE显示的安全弹出窗口的示例:

namespace CaptainPav.Testing.UI.CodedUI.PageModeling.Win
{
    public class IESecurityWindow<T> : PageModelBase<WinWindow>
     {
        protected const string SecurityWindowName = "Internet Explorer Security";

        internal protected override WinWindow Me => new WinWindow().Extend(WinWindow.PropertyNames.Name, SecurityWindowName, PropertyExpressionOperator.EqualTo);

        protected WinButton AllowButton => this.Me.Find<WinButton>(WinButton.PropertyNames.Name, "Allow", PropertyExpressionOperator.EqualTo);

        internal readonly T AllowModel;
        public IESecurityWindow(T allowModel)
        {
            this.AllowModel = allowModel;
        }

        public T ClickAllow()
        {
            // if not IE, this will return false and the next model is returned; change the time if you need more or less wait
            if (this.AllowButton.IsActionable(3000))
            {
                Mouse.Click(this.AllowButton);
            }

            return AllowModel;
        }
    }
}
namespace CaptainPav.Testing.UI.CodedUI.PageModeling.Win
{
公共类IESecurityWindow:PageModelBase
{
受保护的常量字符串SecurityWindowName=“Internet Explorer安全”;
内部保护覆盖WinWindow Me=>new WinWindow().Extend(WinWindow.PropertyNames.Name、SecurityWindowName、PropertyExpressionOperator.EqualTo);
受保护的WinButton AllowButton=>this.Me.Find(WinButton.PropertyNames.Name,“Allow”,PropertyExpressionOperator.EqualTo);
内部只读T AllowModel;
公共安全窗口(T allowModel)
{
this.AllowModel=AllowModel;
}
公共T ClickAllow()
{
//如果不是IE,则返回false并返回下一个模型;如果需要更多或更少的等待,请更改时间
if(this.AllowButton.IsActionable(3000))
{
鼠标。单击(this.AllowButton);
}
返回AllowModel;
}
}
}

在本例中,对话框是Win*类型,而不是Html*。有一些自定义的扩展方法可以使搜索和其他工作变得更容易,但是这会给你一个想法。如果有兴趣,可以在上找到扩展(由我编写)。

您能给我一个小的代码示例吗?我读它时有点困惑。