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

本文关键字:加载 失败 断言 Webdriver -页 标题 | 更新日期: 2023-09-27 18:16:42

当我从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的断言,即使它正在加载的页面是正确的。我可以立即再运行一次测试,它将毫无问题地通过。运行第三次,它可能会再次随机失败。老实说,我不确定是什么导致了这个问题,任何帮助都会很感激!

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

隐式等待只在中查找元素。对于等待页面标题为某个值,您将需要使用显式等待。您可以编写此模式的自己版本,但是在. net绑定中,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。