我正在使用Selenium网络驱动程序,我想监听浏览器中发生的事件。例如,当页面上的某些javascript导致使用window.location = "...";
我的Navigated
EventFiringWebDriver
事件附有监听器。但是当浏览器的URL被更改时,这无法触发。我从中推断出Selenium不能以这种方式听取这个事件吗?
是否有正确的方法来附加来自浏览器的浏览器或DOM事件?
答案 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导航方法何时完成。