Selenium和TFBuild - 页面似乎永远不会加载

时间:2013-04-02 16:54:56

标签: c# selenium tfs automated-tests selenium-webdriver

我已经使用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实例的任何流量(但我不确定这是因为根本没有加载任何内容,或者它只是没有显示在另一个用户会话中加载的流量)。

3 个答案:

答案 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最终导致测试失败。这就是为什么我总是等待测试完成而不是重新启动机器。

相关问题