如果找不到UI元素,如何测试失败?

时间:2012-11-26 12:44:08

标签: c# ui-automation gui-testing

我使用搜索UI元素的方法:

public static bool findtopuielm(string uiitemname)
        {
            bool res = false;
            try
            {
                AutomationElement desktopelem = AutomationElement.RootElement;
                if (desktopelem != null)
                {
                    Condition condition = new PropertyCondition(AutomationElement.NameProperty, uiitemname);
                    AutomationElement appElement = desktopelem.FindFirst(TreeScope.Descendants, condition);
                    if (appElement != null)
                    {
                        res = true;
                    }

                }
                return res;
            }
            catch (Win32Exception)
            {
                // To do: error handling
                return false;
            }
        }

此方法由另一个等待元素的方法调用,直到它出现在桌面上。

public static void waittopuielm(string appname, int retries = 1000, int retrytimeout = 1000)
        {
        for (int i = 1; i <= retries; i++)
        {
            if (findtopuielm(appname))

                break;
                Thread.Sleep(retrytimeout);

            }
        }

当我调用最后一个函数时,例如:

waittopuielm( “测试”);

即使找不到元素,它也总是返回true,在这种情况下我希望测试失败。 任何建议都会受到欢迎。

1 个答案:

答案 0 :(得分:2)

看起来你的 waittopuielem 方法返回void - 你的意思是发布类似这个版本的东西,它返回一个bool?

    public static bool waittopuielm(string appname, int retries = 1000, int retrytimeout = 1000)
    {
        bool foundMatch = false;
        for (int i = 1; i <= retries; i++)
        {
            if (findtopuielm(appname))
            {
                foundMatch = true;
                break;
            }
            else
            {
                Console.WriteLine("No match found, sleeping...");
            }
            Thread.Sleep(retrytimeout);
        }
        return foundMatch;
    }

除此之外,您的代码似乎对我有效。

一个建议:在 findtopuielm 方法中,将桌面元素搜索中的TreeScope值从TreeScope.Descendants更改为TreeScope.Children:

AutomationElement appElement = desktopelem.FindFirst(TreeScope.Children, condition);

TreeScope.Descendants可能正在进行比你想要的更多的递归搜索 - 将搜索桌面元素的所有子元素,以及这些元素的每个子元素(即按钮,编辑控件等)。

因此,在搜索相对常见的字符串时找到错误元素的可能性很高,除非您将NameProperty PropertyCondition与AndCondition中的其他属性组合在一起以缩小搜索范围。