【问题标题】:How to use Validate an email in selenium using MailAddress and Try Catch如何使用 MailAddress 验证 selenium 中的电子邮件并尝试 Catch
【发布时间】:2018-02-08 05:52:55
【问题描述】:

我是 C# 新手,如果您看到基本错误,请道歉。我想验证一个电子邮件地址,我正在使用一个公共布尔值,尝试捕获,然后是一个公共无效。我想从我能够做到的相关 HTML 中检索电子邮件文本,然后使用“MailAddress”验证它是否是有效的电子邮件。

问题是它抛出了异常:

  throw new Exception("email within booking confirmation summary is not valid");

我认为我使用的代码不正确,但有人可以指导我在代码中需要做什么,以确保我正确验证电子邮件,因为我相信我有一些不需要的代码。下面是代码:

 public static bool IsEmail(string emailToValidate)
    {
        if (string.IsNullOrEmpty(emailToValidate))
            return true;

        try
        {
            new MailAddress(emailToValidate);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

    public void CheckEmailDisplayed()
    {
        var email = _driver.FindElement(ConfirmationResponsiveElements.ViewEmail);
        var emailText = email.Text;

        if (IsEmail(emailText))
        {
            Console.WriteLine("email is valid");
        }
        else
        {
            throw new Exception("email within booking confirmation summary is not valid");
        }

ViewEmail 指向下面的 HTML 标记:

 public static By ViewEmail => By.ClassName("confirmation-banner__text");

谢谢

【问题讨论】:

  • 如果不是有效的电子邮件地址,您将引发异常。如果你不想抛出异常,那就不要抛出异常!
  • 是的,但它应该是有效的,所以它不应该抛出一个,或者这就是我所希望的:)
  • 你还没有向我们展示你的意见。
  • 这是输入:'我们已向 yourname@gmail.com 发送电子邮件确认您的预订'
  • 这不是一个有效的电子邮件地址。那是一句话。如果您希望您的函数正确验证它,您只需发送yourname@gmail.com。或者重写它,以便检查整个字符串以查看是否存在至少一个有效的电子邮件地址。

标签: c# selenium


【解决方案1】:

试试下面:-

bool IsValidEmail(string email)
{
    try
    {
        return new System.Net.Mail.MailAddress(email).Address == email;
    }
    catch
    {
        return false;
    }
}

使用这种单线方法-

using System.ComponentModel.DataAnnotations;
public bool IsValidEmail(string source)
{
    return new EmailAddressAttribute().IsValid(source);
}

.net 4.5 添加了ions.EmaSystem.ComponentModel.DataAnnotatilAddressAttribute

您可以浏览EmailAddressAttribute's source,这是它内部使用的正则表达式:

const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";

public static bool emailIsValid(string email)
{
    string expression = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
    if (Regex.IsMatch(email, expression))
    {
        return Regex.Replace(email, expression, string.Empty).Length == 0;
    }
    else
    {
        return false;
    }
}

希望对你有帮助:)

【讨论】:

  • 小心正则表达式。 EmailAddressAttribute 正则表达式在“example@localhost”上失败(但似乎在其他方面做得很好)并且最后一个正则表达式在更有效的地址上失败,例如“#!$%&'*+-/=?^_`{}|~@example.org”(我之前设置了一个名为本地和用户帐户的VM ` 发送邮件。嗯,因为你可以。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2020-09-28
  • 2020-04-01
  • 2019-03-08
相关资源
最近更新 更多