我正在尝试使用Azure AD测试登录到我们的Web应用程序,但"登录"按钮上的单击操作似乎未注册。以下是代码:
namespace WebApp.Tests
{
using System;
using System.IO;
using System.Threading;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
[TestClass]
public class LoginTests
{
[TestMethod]
public void CanLogin()
{
string internetExplorerDriverServerDirectory = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
IWebDriver driver = new InternetExplorerDriver(internetExplorerDriverServerDirectory)
{
Url = "https://localhost:44399"
};
try
{
driver.Manage().Cookies.DeleteAllCookies();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait.Until(d => d.FindElement(By.Id("logonIdentifier")));
driver.FindElement(By.Id("logonIdentifier")).SendKeys("username");
driver.FindElement(By.Id("password")).SendKeys("password");
driver.FindElement(By.Id("next")).Click();
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => d.FindElement(By.ClassName("logo_title")));
driver.FindElement(By.ClassName("logo_title")).Text.Should().Contain("HELLO!");
}
finally
{
driver.Close();
driver.Quit();
driver.Dispose();
driver = null;
}
}
}
}
下面是HTML的相关部分:
<div class="entry">
<div class="entry-item">
<label for="logonIdentifier">Email Address</label>
<div class="error itemLevel" aria-hidden="true" style="display: none;">
<p role="alert"></p>
</div>
<input type="email" id="logonIdentifier" name="Username or email address" pattern="^[a-zA-Z0-9.!#$%&’'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" placeholder="Email Address" value="" tabindex="1" autocomplete="off">
</div>
<div class="entry-item">
<div class="password-label">
<label for="password">Password</label>
<a id="forgotPassword" tabindex="2" href="/redacted">Forgot your password?</a>
</div>
<div class="error itemLevel" aria-hidden="true" style="display: none;">
<p role="alert"></p>
</div>
<input type="password" id="password" name="Password" placeholder="Password" tabindex="1" autocomplete="off">
</div>
<div class="working"></div>
<div class="buttons">
<button id="next" tabindex="1">Sign in</button>
</div>
</div>
在浏览器中看起来一切正常:用户名和密码字段都填好了,按钮看起来像是被点击了(上面短暂地出现了一个小的"工作"图标),但是什么也没有发生。
- 我尝试过在单击"登录"按钮后等待更长时间(最多30秒)才显示主页。
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
- 我尝试在表单中发送
Enter
密钥,而不是单击按钮。
driver.FindElement(By.Id("password")).SendKeys(Keys.Enter);
- 我试着执行一些JavaScript来调用按钮单击动作。
x1米3英寸x1米4英寸
- 我试过使用Chrome和Firefox驱动程序。
- 我已经在本地开发版本和托管测试环境上进行了尝试。
到目前为止没有任何效果。在这个过程中浏览器中没有显示错误/验证消息。
我对这个有点困惑。
谢了,史都华。
3条答案
按热度按时间mznpcxlj1#
从
2019-01-20
开始,这对我很有效:8wtpewkr2#
在我的案例中,我的应用使用Azure AD弹出身份验证
在我最初的示例中,它无法在弹出窗口中找到元素
添加以下代码后,我可以访问这些字段
**GetElementAfterWait这是我们的私有方法,用于在等待一段时间后获取元素
mo49yndu3#
我已经解决了相同的使用CSS选择器作为元素定位器。
SeleniumLibrary.输入文本css:#i0118您的密码
它在每次迭代中都运行良好。