C# Appium/WinAppDriver和WPF/ReactiveUI计时问题-从登录对话框窗口切换到应用程序窗口

C# Appium/WinAppDriver和WPF/ReactiveUI计时问题-从登录对话框窗口切换到应用程序窗口,c#,wpf,appium,reactiveui,winappdriver,C#,Wpf,Appium,Reactiveui,Winappdriver,我正在尝试使用Appium测试WPF应用程序。登录对话框(ReactiveWindow)显示独立于主窗口应用程序(ReactiveWindow),在我的测试中,当我单击登录按钮时,登录窗口关闭并返回主窗口应用程序。过渡之间的时间导致我的测试失败 我可以使用Thread.Sleep(TimeSpan.FromSeconds(5))并且测试将通过。有没有办法使用wait命令来执行此操作 var loginButton = session.FindElementByAccessibilityI

我正在尝试使用Appium测试WPF应用程序。登录对话框(ReactiveWindow)显示独立于主窗口应用程序(ReactiveWindow),在我的测试中,当我单击登录按钮时,登录窗口关闭并返回主窗口应用程序。过渡之间的时间导致我的测试失败

我可以使用Thread.Sleep(TimeSpan.FromSeconds(5))并且测试将通过。有没有办法使用wait命令来执行此操作

    var loginButton = session.FindElementByAccessibilityId("LogonButton");
    loginButton.Click();


    //Thread.Sleep will work here but, is there a way to use a wait?

    var searchBox = session.FindElementByAccessibilityId("SearchBox");
    searchBox.SendKeys("Test 123");
    Assert.AreEqual("Test 123", searchBox.Text);
更新:

var loginButton = session.FindElementByAccessibilityId("LogonButton");
loginButton.Click();

//Thread.Sleep(TimeSpan.FromSeconds(3));

do
{
    try
    {
        var searchBox = session.FindElementByAccessibilityId("SearchBox");
        searchBox.SendKeys("Test 123");
        Assert.AreEqual("Test 123", searchBox.Text);
        break;
    }
    catch (Exception) { /* try again */ }

} while (true);

前面的方法似乎有效,有什么异议或见解吗?

没有,因为就正在测试的代码而言,没有什么可以等待的。您只需同步单击一个按钮,接下来会发生什么,以及需要等待多长时间才能发生,这对于Appium和您的测试来说都是不确定的

这就是为什么建议在视图模型或服务中编写应用程序逻辑,这些模型或服务可以独立于UI进行测试


测试自动化框架都是关于模拟用户输入的。

@Rod:如果您现在要求的是这样的话,您可以使用循环重试,直到成功为止。在我看来,这可能比睡觉稍微好一点。你应该确保你只尝试了最多的次数。否则,您可能会陷入无限循环。