如何捕捉元素是否不可见

时间:2019-10-04 04:14:49

标签: c# selenium testing appium winappdriver

我正在尝试创建一个脚本,在其中可以检查元素是否在UWP应用程序上显示。我有一种方法可以检查元素是显示还是不显示。

如果实际上显示了该元素,并且我调用了“ IsElementDisplayed”,则该测试似乎可以正常工作并继续执行测试。.但是,当该元素实际上未显示并且我调用了“ IsElementDisplayed”时,它不会返回错误的布尔值。.但是它只是停止测试执行并说:“找不到这样的给定参数” ...

请检查我的示例代码。...

我有一个包含定位器并返回WindowsElement实例的类:

    protected WindowsElement Id(string id)
    {
        return Driver.FindElementById(id);
    }

    protected WindowsElement XPath(string xpath)
    {
        return Driver.FindElementByXPath(xpath);
    }

    protected WindowsElement Name(string name)
    {
        return Driver.FindElementByName(name);
    }

    protected WindowsElement AccessibilityId(string id)
    {
        return Driver.FindElementByAccessibilityId(id);
    }

然后我有Page类,其中包含我的元素的属性。下面的示例代码:

    public WindowsElement SaveObligation_Btn => this.AccessibilityId("OBLGTN_saveObligation_btn");

    public WindowsElement CancelObligation_Btn => this.AccessibilityId("OBLGTN_CancelObligation_btn");

    public WindowsElement ObligationAdd_Btn => this.AccessibilityId("SMMRY_AddObligation_btn");

最后,我有一个testhelper类,其中包含以下方法:

    public bool IsNotDisplayed(WindowsElement element)
    {
        try
        {
            Assert.IsFalse(element.Displayed, $"Element: {element} is not displayed on the page!");
            return false;
        }
        catch (Exception)
        {
            return true;
        }
    }

但是当我尝试调用“ IsNotDisplayed”方法以返回false(如果它捕获到任何异常)时,。,我的测试执行停止,并且我将遇到一个指向我的Locator类的错误,并说,“ element is not找到具有给定参数的“ ...

我希望方法“ isNotDisplayed”应返回错误的布尔值,以便我可以验证元素是否可见。

4 个答案:

答案 0 :(得分:0)

我对C#不熟悉。

但是在Python中,我将这样写:

try:
    element = //find your element
    if element.is_displayed():
        return True
    else:
        raise AssertionError
except Exception:
    return False

答案 1 :(得分:0)

第一个问题是当noElementIsDisplayed时要做什么?当然,它将捕获一些例外。在您的方案中,如果在抛出异常时不想执行任何操作,则应将catch块留空。 尝试以下代码:

public bool IsNotDisplayed(WindowsElement element)
{
    try
    {
        Assert.IsFalse(element.Displayed, $"Element: {element} is not displayed on the page!");
        return false;
    }
    catch (Exception e)
    {
        // do nothing and it will continue your script.

    }
}

答案 2 :(得分:0)

请尝试使用下面的c#代码。这是另一种选择。

private bool IsElementPresent(By by)
   {
       try
       {
           driver.FindElement(by);
           return true;
       }
       catch (NoSuchElementException)
       {
           return false;
       }
   }

答案 3 :(得分:-1)

如果显示元素,则返回true,否则返回false。

C#代码

public bool IsNotDisplayed(WindowsElement element)
    {
        try
        {
            element.Displayed;

        }
        catch (Exception)
        {
            return false;
        }
        return true;
    }

Java代码

public static boolean IsDispayed(WebElement webelement)
{
    try {
        webelement.isDisplayed();
    } catch (Exception e) {
        return false;
    }
    return true;
}

Python代码

try:
    element = driver.find_element_by_xpath('XPATH')
    if element.is_displayed():
        return True
    else:
        raise AssertionError
except Exception:
    return False