2

Ich verwende Selenium, um einen Integrationstest durchzuführen. Ein Teil des Tests ist der Anmeldevorgang, die Microsoft Azure Active Directory usesElement verdeckt, wenn Selenium getestet wird Edge-Webdriver für Azure Active Directory-Anmeldung Melden Sie sich bei Ihrer Kontoseite an

Der Test besteht, wenn InternetExplorerWebDriver mit, doch irgendwie EdgeWebDriver mit dem Fehler:

Element is obscured

Der relevante Teil des Codes:

var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10)); 
webDriver.Url = Settings.UrlHome(); 

var signInElement = webDriver.FindElement(By.Id("SignInLink")); 
signInElement.Click();  

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("my_login_name"))); 
var loginLogoMicrosoft = webDriver.FindElement(By.Id("my_login_name")); 

loginLogoMicrosoft.Click(); 

Der Fehler tritt auf, wenn der letzte Click() ausgeführt wird. Ich habe mehrere andere Elemente ausprobiert, aber keine von ihnen funktioniert. Auch 'inspect element', um festzustellen, welche Elemente den Klick erhalten, erhalten diesen Fehler bei der Implementierung in Code.

Wie kann ich den Microsoft Azure Active Directory-Anmeldeprozess Teil meines Selenium-Tests machen?

Eine ähnliche Art von Problem wird here gefunden.

+0

Laut Ihrem Link ist es ein bestätigter Fehler in EdgeDriver. Warte es aus ... – FDM

Antwort

1

Ich verwende den folgenden Code zum Ausfüllen des Azure AD-Anmeldeformulars. Der Vorbehalt besteht darin, dass wenn Sie das Feld "Benutzername" ausfüllen, die Schaltfläche "Anmelden" deaktiviert ist, bis im Hintergrund eine Ajax-Operation ausgeführt wird. Der Trick besteht darin, zu warten, bis auf der Seite ohne diese Klasse eine Schaltfläche "Anmelden" angezeigt wird.

private void SubmitLoginForm() 
{ 
    var useAnotherAccount = Driver.FindElements(By.ClassName("use_another_account")).FirstOrDefault(); 

    if (useAnotherAccount != null) 
    { 
     useAnotherAccount.Click(); 
    } 

    var loginInput = Driver.FindElements(By.Id(Site.Login.UserNameInput)).FirstOrDefault(); 

    if (loginInput != null) 
    { 
     loginInput.SendKeys(TestingData.UserName); 
     loginInput.SendKeys(Keys.Tab); 
    } 

    var passwordInput = Driver.FindElements(By.Id(Site.Login.PasswordInput)).FirstOrDefault(); 

    if (passwordInput != null) 
    { 
     passwordInput.Clear(); 
     passwordInput.SendKeys(TestingData.PassWord); 
     passwordInput.SendKeys(Keys.Enter); 
    } 

    var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5)); 
    wait.Until(f => f.FindElement(By.CssSelector("#cred_sign_in_button:not(.disabled_button"))); 

    var loginButton = Driver.FindElements(By.Id(Site.Login.SigninButton)).FirstOrDefault(); 

    if (loginButton != null) 
    { 
     loginButton.Click(); 
     return; 
    } 

    throw new InvalidOperationException("Could not click the login button"); 
} 
+0

Die zwei Hauptzeilen, die diese Frage beantworten, sind var wait = new etc ... und wait.Until etc ... – user890332

Verwandte Themen