3

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

我有一个监听器连接到Navigated我的EventFiringWebDriver. 但是当浏览器的 url 改变时,这不会触发。我由此推断 Selenium 不能以这种方式收听事件?

是否有适当的方法附加到来自浏览器的浏览器或 DOM 事件?

4

2 回答 2

4

我能够使用该OpenQA.Selenium.Support.UI.WebDriverWait对象来实现这一点。我只需要指定谓词(浏览器 url 的比较)和时间跨度。Selenium 每 500 毫秒检查一次结果,直到它返回 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");
    }
于 2013-03-13T23:22:58.617 回答
0

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

于 2013-03-05T12:05:55.900 回答