首页 > 解决方案 > 仅在函数中评估传递的对象

问题描述

我想将一个对象传递给 C# 函数,以便在函数中而不是之前对其进行评估。这可能吗?

背景:我想检查特定的 WindowsElement 对于 UI 测试是否可见。在评估此元素时(还)不可用时会引发异常。

当我编写一个期望此 WindowsElement 作为参数的函数时,它会在函数调用之前进行评估。但是我不能在它周围写一个 try/catch 块。

public static bool IsVisible(WindowsElement windowsElement) {
    try {
        return windowsElement.Displayed;
    }
    catch {
        return false;
    }
}

作为一种解决方法,我创建了一个没有输入参数并返回布尔值的func 委托。这种方法的一个缺点是检查很长,我必须再次为每个 WindowsElement 插入这个 Func 委托。

Func<bool> isElementVisible = () => {
    try {
        return UIControls.MyWindowsElement.Displayed;
    }
    catch {
        return false;
    }
};

有没有办法将这两种方法结合起来?

标签: c#appium

解决方案


您可以编写扩展方法来检查可见性

  class Program
{
    static void Main(string[] args)
    {

        var element = new WindowsElement(null, "test");                       
        var isVisible = element.IsVisible();
        Console.WriteLine(isVisible);
    }
}



public static class WindowsElementExtensions
{
     public static bool IsVisible(this WindowsElement windowsElement)
{
    try
    {
        return windowsElement.Displayed;
    }
    catch
    {
        return false;
    }
}

}


推荐阅读