C# Webdriver - 页面标题断言在页面加载前失败

标签 c# selenium visual-studio-2012 webdriver

当我从 www 网站上的测试切换到我的本地主机版本时,这个问题就开始了。在 VS 2012 中工作,我将开始调试以使本地主机处于事件状态,分离进程以便我可以对其进行测试,然后运行我喜欢的任何测试。举一个非常基本的例子:

    [Test]
    public void CanGoToHomePage()
    {
        Pages.HomePage.Goto();
        Assert.IsTrue(Pages.HomePage.IsAt());
    }

它引用的函数在这里:

    public class HomePage
    {
        const string Url = "http://localhost:3738";
        const string HomepageTitle = "FunnelFire - Home Page";

        public void Goto()
        {
            Browser.Goto(Url);
        }

        public bool IsAt()
        {
            return Browser.Title == HomepageTitle;
        }
    }

这里是实际的 selenium 代码:​​

    public static class Browser
    {
        static IWebDriver webDriver = new FirefoxDriver();

        public static void Goto(string url)
        {
            webDriver.Manage().Window.Maximize();
            webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
            webDriver.Url = url;
        }
    }

现在是问题。我在浏览器中添加的 10 秒隐式等待确实成功地在加载页面后最多等待 10 秒以查看它是否可以找到我想要它找到的任何信息,这不是问题。

正如我之前所说,在我切换到在本地主机上进行测试后,我突然遇到了一个页面开始加载的奇怪问题(即屏幕仍然全白,什么都没有完成),甚至有时下一页几乎无法完成加载,突然测试会启动并失败,指向 IsAt 的断言返回 false,即使它加载的页面是正确的。我可以立即再次运行该测试,它会毫无问题地通过。第三次运行它,它可能会再次随机失败。老实说,我不确定是什么导致了这个问题,我们将不胜感激!

最佳答案

隐式等待用于查找元素。要等待页面标题成为某个值,您需要使用显式等待。您可以编写自己的此模式版本,但在 .NET 绑定(bind)中,WebDriver.Support.dll 程序集有一个 WebDriverWait 类来帮助完成此操作。它的使用看起来像这样:

// WARNING! Untested code written from memory below. It has not
// been tested or even compiled in an IDE, so may be syntactically
// incorrect. The concept, however, should still be valid. 
public void WaitForTitle(IWebDriver driver, string title, TimeSpan timeout)
{
    WebDriverWait wait = new WebDriverWait(driver, timeout);
    wait.Until((d) => { return d.Title == title; });
}

您甚至可以修改您的 IsAt 方法以使用此模式,捕获 WebDriverTimeoutException 并在等待函数超时时返回 false。

关于C# Webdriver - 页面标题断言在页面加载前失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904172/

相关文章:

c# - c#中类的泛型调用

c# - Outlook 2007/2010 上下文菜单项图片

java - 从 Selenium Webdriver WebElement 字段中检索值并将其传递给 java 变量

ruby-on-rails - 测试列表以正确的顺序排列在 capybara 中

java - 项目无法识别 cucumber-picocontainer 依赖项

c# - 如何从 Visual Studio 2012 中的 resharper 测试 session 窗口导航到功能文件?

c# - 在Docker容器C#中使用系统环境变量

c# - ASP.NET 4.5 MVC4 模型绑定(bind)问题 - 无法定义任何模型

c++ - 如何使用 CMake 生成面向 Windows XP 的 Visual Studio 2012 项目?

c# - 复制注册表中的子类别