2017-08-30 3 views
0

Ich bin neu in C# so entschuldigen Sie sich, wenn Sie grundlegende Fehler sehen. Ich möchte eine E-Mail-Adresse validieren und verwende ein öffentliches Bool, versuche zu fangen und dann eine öffentliche Lücke. Ich möchte den E-Mail-Text aus dem relevanten HTML abrufen, den ich durchführen konnte, und dann bestätigen, dass es sich um eine gültige E-Mail mit "MailAddress" handelt.Wie zu verwenden Validieren Sie eine E-Mail in Selen mit MailAddress und versuchen Catch

Das Problem ist, dass es eine Ausnahme wirft:

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

Ich glaube, ich den Code falsch bin mit aber kann mir jemand führen, was ich brauche, um den Code zu tun, ich richtig die Validierung bin, um sicherzustellen, E-Mail, da ich glaube, ich habe einen Code, den ich nicht brauche. Unten ist der Code:

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 unten auf ein HTML-Tag zeigt:

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

Dank

+0

Sie werfen eine Ausnahme, wenn es keine gültige E-Mail-Adresse ist. Wenn Sie keine Ausnahme werfen wollen, dann werfen Sie keine! – mason

+0

ja, aber es sollte gültig sein, so sollte es nicht werfen, oder das ist, was ich gehofft hatte :) – BruceyBandit

+0

Nun, Sie haben uns Ihre Eingabe nicht gezeigt. – mason

Antwort

0

unten Versuchen: -

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

ODER

Verwenden diese Einliner-Methode -

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

ODER

.net 4.5 ions.EmaSystem.ComponentModel.DataAnnotatilAddressAttribute hinzugefügt

können Sie die EmailAddressAttribute's source sehen, ist dies die Regex es intern verwendet:

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])))\.?$"; 

ODER

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; 
    } 
} 

Ich hoffe, es wird Ihnen helfen :)

+0

Sei einfach vorsichtig mit Regex. Der "EmailAddressAttribute" Regex scheitert an "' example @ localhost' "(scheint aber ansonsten ziemlich gut zu funktionieren) und dieser letzte Regex schlägt bei mehr gültigen Adressen wie" #! $! " \ '{} | ~ @ example.org'" (Ich habe vorher eine VM eingerichtet mit einem lokalen & Benutzerkonto namens \ 'um E-Mails zu senden. Äh, weil du kannst.) – BurnsBA

Verwandte Themen