首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium WebDriver C# --在引发异常时继续

Selenium WebDriver C# --在引发异常时继续
EN

Stack Overflow用户
提问于 2017-11-07 13:32:17
回答 2查看 919关注 0票数 0

我想检查页面中是否存在一些元素,如果没有元素,我希望看到一个自定义错误消息列表,告诉我哪些元素不存在。

现在我有:

测试用例:

代码语言:javascript
复制
[Test]
public void CheckAllElementsArePresent()
{
    Assert.IsTrue(Results.CheckFirstElement());
    Assert.IsTrue(Results.CheckSecondElement());
    Assert.IsTrue(Results.CheckThirdElement());
}

框架:

代码语言:javascript
复制
public static bool CheckFirstElement()
{
    var results = Driver.Instance.FindElement(By.CssSelector("firstElementSelector']"));

    if (results == null)
    {
        throw new Exception("Cannot find first element");
    }

    var attr = results.GetAttribute("id");
    if (attr == null)
    {
        throw new Exception("Cannot find first element");
    }

    if (attr.Contains("someTextIWantToFind"))
    {
        return true;
    }
    return false;
}

但是,如果其中任何一个都失败了,测试就会失败。我需要一种方法来继续运行测试,然后在测试结束时吐出任何错误,例如:“找不到第一个元素”、“找不到第三个元素”等等。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-13 18:53:09

创建一个新类,该类将根据您的需要保存方法。

代码语言:javascript
复制
public static class MakeSure
{
    private static List<string> errorsFound = new List<string>();
    public static List<string> getErrors() { return errorsFound; }

    public void ElementIsNotNull(IWebElement element, string elementName)
    {
        if(element == null)
        {
           errorsFound.Add("Cannot find element " + elementName +".");
        }
    }

    public void ElementHasAttribute(IWebElement element, string elementName, string attribute)
    {
        if(element.GetAttribute(attribute) == null)
        {
            errorsFound.Add("Cannot find " + attribute + " attribute of the element."); 
        }
    }

    public void ElementContaisText(IWebElement element, string elementName, string attribute, string text)
    {
        if(!element.GetAttribute(attribute).Text.Contains(text))
        {
            errorsFound.Add("Cannot find the text " + text +" in " + elementName +" element"); 
        }
    }
}

您可以从测试用例中将它们调用为"MakeSure“--您的元素有一个特定的属性,不是null等等。您可以创建更多的重载,这样您就不必每次都将"ID”放入“属性”,如下所示:

代码语言:javascript
复制
public void ElementHasAttribute(IWebElement element, string elementName)
{
    ElementHasAttribute(element, elementName, "id");
}

因此,每次您希望属性是"id“时,只需调用重载方法。您几乎可以按照上面的示例进行任何操作,并将代码/方法更改为您的需要。

还可以修改结果类以执行以下操作

代码语言:javascript
复制
public void CheckFirstElement()
{
    IWebElement firstElement;
    MakeSure.ElementIsNotNull(firstElement, "first element");
    MakeSure.ElementHasAttribute(firstElement, "first element", "id");
    MakeSure.ElementContaisText(firstElement, "first element", "id", "Text to validate.");
}

所以在你的测试中你要做的就是:

代码语言:javascript
复制
Results.CheckFirstElement();
票数 0
EN

Stack Overflow用户

发布于 2017-11-07 13:49:44

您可以做的是修改方法以返回错误字符串:

代码语言:javascript
复制
public static string CheckFirstElement()
{
    var results = Driver.Instance.FindElement(By.CssSelector("firstElementSelector']"));

    if (results == null)
    {
        return "Cannot find first element";
    }

    var attr = results.GetAttribute("id");
    if (attr == null)
    {
        return "Cannot find id attribute of first element";
    }

    if (!attr.Contains("someTextIWantToFind"))
    {
        return "Cannot find the text in first element";
    }
    return null;
}

然后收集主测试中发现的任何错误:

代码语言:javascript
复制
[Test]
public void CheckAllElementsArePresent()
{
    var errors = new List<string>();
    var error = Results.CheckFirstElement();
    if(error != null)
        errors.Add(error);
    error = Results.CheckSecondElement();
    if(error != null)
        errors.Add(error);
    error = Results.CheckThirdElement();
    if(error != null)
        errors.Add(error);

    if(errors.Any())
    {
        //Output to console
        var errorString = string.Join(";", errors);
        Console.Writeline(errorString);
        //Fail the test
        Assert.Fail(errorString);
    }

}

这只是一条路。您可以使用booleanErrorMessage属性返回一个类,如果您想得到更好的效果的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47159281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档