Selenium EventFiringWebDriver导航事件

时间:2013-03-05 11:47:07

标签: c# selenium selenium-webdriver

我正在使用Selenium网络驱动程序,我想监听浏览器中发生的事件。例如,当页面上的某些javascript导致使用window.location = "...";

更改网址时

我的Navigated EventFiringWebDriver事件附有监听器。但是当浏览器的URL被更改时,这无法触发。我从中推断出Selenium不能以这种方式听取这个事件吗?

是否有正确的方法来附加来自浏览器的浏览器或DOM事件?

2 个答案:

答案 0 :(得分:2)

我能够使用OpenQA.Selenium.Support.UI.WebDriverWait对象来实现这一目标。我只需要指定谓词(浏览器URL上的比较)和时间跨度。 Selenium每500ms检查一次结果,直到它返回true或经过了时间跨度,在这种情况下测试失败。不完全是事件驱动但它具有预期的效果:

    private readonly IWebDriver _driver = new FirefoxDriver();

    [Test]
    public void UrlIsCorrect()
    {
        var w = new WebDriverWait(_driver, TimeSpan.FromSeconds(30));
        w.Until(driver => driver.Url == "http://test.com");
    }

答案 1 :(得分:0)

很抱歉,不,WebDriver API不支持直接侦听DOM事件,即使使用EventFiringWebDriver也是如此。您可以使用JavaScript将事件处理程序附加到事件,在全局页面上下文中设置JavaScript变量,然后您可以从WebDriver中读取该变量,但这有点令人费解。 Navigated事件指的是WebDriver导航方法何时完成。