2

我需要检测浏览器中的 url 何时更改,无论是因为单击链接、表单帖子还是我更改了代码中的 url。

我需要它,因为我正在创建一个对象来表示页面,并且我需要在 url 更改时重新创建它。

这是我到目前为止所尝试的:

private string _pageUrl;
protected T _page = default(T);
protected T Page
{
    get
    {
        if (_page == null || UrlHasChanged())
        {
            _page = GetPage<T>();
            SetPageUrl();
        }
        return _page;
    }
}

private bool UrlHasChanged()
{
    var driver = Session.GetDriver();
    return driver.Url != _pageUrl;
}

public void SetPageUrl()
{
    _pageUrl = Session.GetDriver().Url;
}

这在大多数情况下都有效,但是当测试前进一个页面然后返回到初始页面时它会失败。

我需要一种方法来检测 url 何时更改,以便我可以重置 _page 字段。

4

1 回答 1

6

我是一名 Java 开发人员,因此,我在 C# 文档中搜索与 Java API 相似的内容。我认为您应该使用 EventFiringWebDriver :

EventFiringWebDriver firingDriver = new EventFiringWebDriver(driver);
firingDriver.NavigatingBack += new EventHandler<WebDriverNavigationEventArgs>(...);
firingDriver.NavigatedBack += new EventHandler<WebDriverNavigationEventArgs>(...);
firingDriver.NavigatingForward += new EventHandler<WebDriverNavigationEventArgs>(...);
firingDriver.NavigatedForward += new EventHandler<WebDriverNavigationEventArgs>(...);

我查看了单元测试,发现这个可能对您有用: http ://selenium.googlecode.com/svn/trunk/dotnet/test/WebDriver.Support.Tests/Events/EventFiringWebDriverTest.cs

于 2012-12-07T21:47:55.993 回答