我正在使用Selenium进行集成测试。测试的一部分是Microsoft Azure Active Directory使用的登录过程
使用InternetExplorerWebDriver测试通过,但使用EdgeWebDriver测试失败,错误:
元素被遮挡
代码的相关部分:
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();
执行最后一次Click()时发生错误。我试过其他几个元素,但都不起作用。当在代码中实现时,还可以'inspect element'来确定哪些元素接收到click get this错误。
如何使Microsoft Azure Active Directory登录过程成为我的Selenium测试的一部分?
在这里发现了同样的问题
我使用以下代码填写Azure AD登录表单。需要注意的是,当您填写用户名字段时,"Sign In"按钮将被禁用,直到在后台完成一些ajax操作。诀窍是等到页面上没有这个类的Sign In按钮。
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");
}