我使用 Selenium 和 webdriver 为 MVC 应用程序编写了许多测试。这些在我的开发机器上工作没有问题。我们正在使用 PageFactory 设计。目前,我在页面加载时有 3 秒的显式等待(尽管我已经测试了长达 10 秒没有变化)。
下面是一个比较简单的测试:
考试
[TestMethod]
public void Can_Log_In_With_Valid_Credential()
{
Pages.LoginPage.Goto();
var success = Pages.LoginPage.Login(Properties.Settings.Default.UserName,
Properties.Settings.Default.Password);
Assert.IsTrue(success);
Pages.HeaderPage.LogOut();
}
页面及相关逻辑
public static class Pages
{
public static LoginPage LoginPage
{
get
{
var loginPage = new LoginPage();
PageFactory.InitElements(Browser.Driver, loginPage);
return loginPage;
}
}
}
public class LoginPage : Page
{
public static string Url = Properties.Settings.Default.DomainAddress + "/Account/Logon";
public static string PageTitle = "Log On";
[FindsBy(How = How.Id, Using = "UserName")]
private IWebElement _userNameBox;
[FindsBy(How = How.Id, Using = "Password")]
private IWebElement _passwordBox;
[FindsBy(How = How.ClassName, Using = "validation-summary-errors")]
private IWebElement _validationErrors;
[FindsBy(How = How.CssSelector, Using = "div#LoginSubmit.signin input")]
private IWebElement _submitButton;
public void Goto()
{
Browser.Goto(Url);
}
public bool IsAt()
{
return Browser.Title == PageTitle;
}
public bool Login(string username, string password)
{
try
{
_userNameBox.SendKeys(username);
}
catch (Exception)
{
_userNameBox = ((IWebDriver) Browser.Driver).FindElement(By.Id("UserName"), 10);
_userNameBox.SendKeys(username);
}
_passwordBox.SendKeys(password);
_submitButton.Click();
return Browser.CurrentUrl != Properties.Settings.Default.DomainAddress + "/Account/Logon";
}
}
问题出现在构建服务器上。所有测试均失败,原因如下:
类初始化方法 KepsPortalMvc.UserAccountManagementTests.Initialize 抛出异常。OpenQA.Selenium.WebDriverTimeoutException: OpenQA.Selenium.WebDriverTimeoutException: 10 秒后超时---> OpenQA.Selenium.NoSuchElementException: 无法定位元素:{"method":"id","selector":"UserName"}。
似乎 Firefox 甚至没有加载该页面。我已经(通过任务管理器)验证了 Webdriver 和 Firefox 都由 BuildServiceAccount 启动,但是我还没有找到监视网络活动的方法(Fiddler 没有向我显示与该 Firefox 实例相关的任何 HTTP 流量)非常少)。
有没有办法让我监控 WebDriver-Firefox?它不会弹出,因为它作为不同的帐户运行(我假设这就是原因)。
任何帮助将不胜感激。
澄清
这适用于我的开发机器,但不适用于 Team Foundation Build 服务器。我们在单个服务器上运行 Team Foundation。TFBuild 服务帐户是当前运行 Webdriver 和 Firefox 的帐户。Firefox 的进程条目在运行时会出现在任务管理器中,就像 WebDriver 的条目一样。Firefox 的窗口没有。Fiddler 没有向我显示该 Firefox 实例的任何流量(但我不确定这是否是因为根本没有加载任何内容,或者它只是没有显示在另一个用户会话中加载的流量)。