C# 检测selenium webdriver何时更改浏览器中的url

C# 检测selenium webdriver何时更改浏览器中的url,c#,webdriver,C#,Webdriver,我需要检测浏览器中的url何时更改,是因为单击链接、表单帖子还是我在代码中更改了url 我需要它,因为我正在创建一个对象来表示页面,并且需要在url更改时重新创建它 以下是我迄今为止所尝试的: private string _pageUrl; protected T _page = default(T); protected T Page { get { if (_page == null || UrlHasChanged()) {

我需要检测浏览器中的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;
}
private string\u pageUrl;
受保护的T_页面=默认值(T);
受保护的T页
{
得到
{
如果(_page==null | | UrlHasChanged())
{
_page=GetPage();
SetPageUrl();
}
返回页面;
}
}
私有布尔UrlHasChanged()
{
var driver=Session.GetDriver();
返回驱动程序.Url!=\u页面Url;
}
public void SetPageUrl()
{
_pageUrl=Session.GetDriver().Url;
}
这在大多数情况下都是有效的,但是当测试前进一个页面,然后返回到初始页面时,它会失败


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

我是一名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>(...);
EventFiringWebDriver firingDriver=新的EventFiringWebDriver(驱动程序);
firingDriver.NavigatingBack+=新的事件处理程序(…);
firingDriver.NavigatedBack+=新的EventHandler(…);
firingDriver.NavigatingForward+=新的事件处理程序(…);
firingDriver.NavigatedForward+=新的EventHandler(…);
我查看了单元测试,发现这个测试可能对您有用:

太棒了。非常感谢。我认为当URL在单击链接/按钮后发生更改时,这将不起作用。遗憾的是,EventFiringWebDriver仅在您显式调用Navigate()时起作用method@HappyBird你找到解决方案了吗?@garryman你可以自由地实现更多的侦听器方法,这可能会导致URL更改,例如
导航到
单击
更改
的值等。这将处理鼠标单击和按键。