2013-03-05 1 views
3

Я использую веб-драйвер Selenium, я хочу слушать события, происходящие в браузере. Например, когда некоторые javascript на странице вызывает изменение URL-адреса с помощью window.location = "...";Selenium EventFiringWebDriver Перемещенное событие

У меня есть слушатель, подключенный к событию Navigated моего EventFiringWebDriver. Но это не срабатывает при изменении URL-адреса браузера. Я выводю из этого, что Selenium не может слушать событие таким образом?

Есть ли подходящий способ подключения к браузере или событиям DOM, поступающим из браузера?

ответ

2

Для этого я смог использовать объект OpenQA.Selenium.Support.UI.WebDriverWait. Мне просто нужно указать предикат (сравнение по URL-адресу браузера) и промежуток времени. Селен проверяет результат один раз каждые 500 мс до тех пор, пока он не вернет истину или не истечет время ожидания, и в этом случае тест завершится с ошибкой. Не совсем событийный, но она имеет желаемый эффект:

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

К сожалению, нет, API WebDriver не поддерживает прослушивание событий DOM напрямую, даже с помощью EventFiringWebDriver. Возможно, вы сможете использовать JavaScript для прикрепления обработчика события к событию, задав переменную JavaScript в контексте глобальной страницы, которую вы могли бы затем прочитать из WebDriver, но это немного запутанно. Событие Navigated относится к тому, когда методы навигации WebDriver завершены.

+0

Спасибо за разъяснение вокруг 'EventFiringWebDriver', вы можете быть заинтересованы в решении я нашел в альтернативном ответ на этот вопрос. – Nick

Смежные вопросы