我已经使用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似乎甚至没有加载页面。我已经验证(通过任务管理器)WebService和Firefox都是由BuildServiceAccount启动的,但是我还没有找到监控网络活动的方法(Fiddler没有向我显示任何与该Firefox实例相关的HTTP流量)至少)。
有没有办法(在构建服务器上放置类似Wireshark的东西)让我监控WebDriver-Firefox?它不会弹出,因为它作为一个不同的帐户运行(我假设这就是原因)。
非常感谢任何帮助。
这适用于我的Dev机器,但不适用于Team Foundation Build服务器。我们在单个服务器上运行Team Foundation。 TFBuild服务帐户是当前运行Webdriver和Firefox的帐户。 Firefox的进程条目在运行时出现在任务管理器中,WebDriver的条目也是如此。 Firefox的WINDOW没有。 Fiddler没有向我显示该Firefox实例的任何流量(但我不确定这是因为根本没有加载任何内容,或者它只是没有显示在另一个用户会话中加载的流量)。
答案 0 :(得分:2)
这里有一些有根据的猜测,但可能是您的测试环境未设置为UI测试。查看MSDN上的this文章,看看应该如何完成。
其次,根据我的经验,如果构建代理运行不同版本的msbuild,则可能会发生此类行为。确保它们是相同的。例如,使用VS 2010和VS 2012构建将使用不同的程序集,从而在运行时引发不同的结果。
答案 1 :(得分:0)
OpenQA.Selenium.NoSuchElementException
我认为此错误显示没有元素是fpund。可能会导致FF在当前窗口失去焦点? 你打开了几个窗口?或者可能在打开URL后添加sleep或implicite等待,直到元素为isVisible?
答案 2 :(得分:0)
如果我理解正确,您可以使用Selenium在本地开发计算机上运行UI测试,并希望它们不运行TFS构建计算机。
默认情况下这不起作用,因为构建过程是没有UI的服务,当它在TFS Build服务" session"中运行时,您将无法看到它。因此,您需要将TFS构建设置为以交互式进程(http://msdn.microsoft.com/en-us/library/hh691189.aspx#agent_test)运行,但这意味着服务器始终会被阻止。如果它是某个地方的硬件计算机,则可以打开监视器并将其与构建凭据一起使用,因为它未锁定。
我做了一些类似于MS编码的UI测试的东西,看看它是否正常工作我使用我的帐户作为构建帐户,所以我可以打开一个到服务器的RDP会话,这与构建相同。所以我可以看到测试期间发生了什么,但关闭RDP最终导致测试失败。这就是为什么我总是等待测试完成而不是重新启动机器。