2

통합 테스트를 위해 Selenium을 사용하고 있습니다. 시험의 일부는 InternetExplorerWebDriver를 사용하는 경우 마이크로 소프트 애저 Active Directory의 usesSelenium 테스팅시 Azure Active Directory 로그인 Edge webdriver 계정 페이지에 로그인

테스트를 통과 로그온 프로세스이지만, 오류가있는 EdgeWebDriver와 함께 실패합니다

Element is obscured

코드의 관련 부분 :

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(); 

마지막 클릭()을 실행할 때 오류가 발생합니다. 여러 다른 요소를 시도했지만 그 중 아무도 작업하지 않습니다. 또한 '요소 검사'를 통해 코드를 구현할 때 클릭을받는 요소가이 오류를 가져 오는 지 확인합니다.

Microsoft Azure Active Directory 로그온 프로세스를 Selenium 테스트의 일부로 만들려면 어떻게해야합니까?

동일한 종류의 문제가 here입니다.

+0

귀하의 링크에 따르면, EdgeDriver에서 확인 된 버그입니다. 기다려 ... – FDM

답변

1

다음 코드를 사용하여 Azure AD 로그인 양식을 작성합니다. 주의해야 할 점은 사용자 이름 필드를 채울 때 백그라운드에서 일부 아약스 작업이 완료 될 때까지 "로그인"버튼이 비활성화된다는 것입니다. 트릭은이 클래스가없는 페이지에 로그인 버튼이 생길 때까지 기다리는 것입니다.

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

이 질문에 답하는 주된 두 줄은 var wait = new ...와 wait.unntil ...입니다. – user890332